day2 - 使用OpenCV进行图像的读取与展示

news2024/11/22 16:43:04

本期将使用OpenCV对图像进行一些基本的了解和操作:主要包含图像的读取、展示和保存,以及查看图像的基本属性,让我们充分的了解图像,为后续图像处理做准备。

完成本期内容,你可以:

  • 会使用OpenCV对图像进行读取、展示、保存等基本操作

  • 学会查看图像的基本属性

若要运行案例代码,你需要有:

  • 操作系统:Ubuntu 16 以上 或者 Windows10

  • 工具软件:VScode 或者其他源码编辑器

  • 硬件环境:无特殊要求

  • 核心库:python 3.6.13, opencv-contrib-python 3.4.11.39,opencv-python 3.4.2.16

    # 比如: opencv安装
    pip install opencv-python==3.4.2.16
    # 如果下载速度特别慢可以指定国内镜像
    pip install opencv-python==3.4.2.16 -i https://pypi.douban.com/simple
    

点击下载源码


图像读取

OpenCV中提供的图像读取的函数是 cv2.imread( )。

函数原型: image = cv2.imread(filename, flags)

image 为输出图像。

参数描述如下:

参数描述
filename【必需】要读取的图像的完整文件名。
flags读取图像颜色类型的标记。flags的默认值是1,表示读取的图像是彩色图像,此时的flags可以省略;当flags的值为0时,表示要读取的是灰度图像(如果读取的是彩色图像,也将彩色图像转换为彩色图像对应的灰度图像)

图像展示

OpenCV 中提供的图像展示的函数是 cv2.imshow( )。

函数原型: cv2.imshow(winname, mat)

image 为输出图像。

参数描述如下:

参数描述
winname显示图像的窗口名称
mat要显示的图像

使用 OpenCV 展示图片时,通常需要通过用户键盘输入来关闭窗口,OpenCV 中提供的等待用户按键的函数是cv2.waitKey( )。

函数原型: retval = cv2.waitKey(delay)

retval 为被按下的按键对应的 ASCII 码。

参数描述如下:

参数描述
delay等待用户按下键盘上按键的时间,单位是毫秒(ms)。当delay的值为复数、0或者空时,表示无限等待用户按下键盘上的时间。

OpenCV 中提供的用于销毁正在显示图像的窗口的函数是 cv2.destroyAllWindows( )。

函数原型: cv2.destroyAllWindows( )

图像保存

OpenCV 中提供的图像保存的函数是 cv2.imwrite( )。

函数原型:cv2.imwrite(filename, img);

参数描述如下:

参数描述
filename保存图像时的完整路径
img要保存的图像

4.4 获取图像属性

在处理图像的过程中,经常需要获取大小、类型等图像属性。为此,OpenCV 提供了 shape、size 和 dtype 3个属性,具体含义如下:

  • shape:如果是彩色图像,那么获取的是一个包含图像的垂直像素、水平像素和通道数的数组,即(垂直像素,水平像素,通道数);如果是灰度图像,那么获取的是一个包含图像垂直像素和水平像素的数组,即(垂直像素,水平像素)。
  • size:获取的是图像包含的像素个数,其值为 “ 水平像素 × 垂直像素 × 通道数 水平像素\times 垂直像素 \times 通道数 水平像素×垂直像素×通道数 ”。
  • dtype:获取的是图像的数据类型

具体步骤

1. 创建项目结构

创建项目名为使用OpenCV进行图片的展示与保存,项目根目录下新建code文件夹储存代码,新建dataset文件夹储存数据,项目结构如下:

使用OpenCV进行图片的展示与保存             # 项目名称
├── code                               # 储存代码文件
├── dataset                            # 储存数据文件

注:如项目结构已存在,无需再创建。

2. 使用 OpenCV 读取图片并展示

  1. code文件夹下创建img_show.py文件;
  2. 读取dataset文件夹下的flower.jpg图片,并进行展示,标题为 flower ;
  3. 无限等待用户输入按键,按下按键后销毁所有窗口。

代码实现

# 导入OpenCV
import cv2
# 读取彩色图像
img = cv2.imread('../dataset/flower.jpg')
# 展示图像
cv2.imshow("flower",img)
# 等待用户输入
cv2.waitKey(0)
# 销毁所有窗口
cv2.destroyAllWindows()

请添加图片描述

实验效果

3. 使用 OpenCV 读取灰度图片并保存

  1. code文件夹下创建img_save.py文件;
  2. 读取dataset文件夹下的flower.jpg图片,转换为灰度图,并进行展示,标题为flower ;
  3. 将灰度图片以gray_img.jpg 保存至dataset文件夹下;
  4. 无限等待用户输入按键,按下按键后销毁所有窗口。

代码实现

# 导入OpenCV
import cv2
# 读取图像
gray_img = cv2.imread('../dataset/flower.jpg',0)
# 展示图像
cv2.imshow("flower",gray_img)
# 保存图像
cv2.imwrite('../dataset/gary_img.jpg',gray_img)
# 等待用户输入
cv2.waitKey(0)
# 销毁所有窗口
cv2.destroyAllWindows()

请添加图片描述

实验效果

4. 打印图像的属性

  1. code文件夹下创建img_attributes.py文件;
  2. 读取dataset文件夹下的flower.jpg图片;
  3. 打印图像的(垂直像素,水平像素,通道数)、像素数 、数据类型。

代码实现

# 导入OpenCV
import cv2
# 读取彩色图像
img = cv2.imread('../dataset/flower.jpg')
# 打印彩色图像的属性
print('---获取图像flower.jpg的属性---')
print('图像的(垂直像素,水平像素,通道数)',img.shape)
print('图像包含的像素数',img.size)
print('图像的数据类型',img.dtype)
# 实验结果
---获取图像flower.jpg的属性---
图像的(垂直像素,水平像素,通道数) (596, 452, 3)
图像包含的像素数 808176
图像的数据类型 uint8

素,水平像素,通道数)',img.shape)
print(‘图像包含的像素数’,img.size)
print(‘图像的数据类型’,img.dtype)


```python 
# 实验结果
---获取图像flower.jpg的属性---
图像的(垂直像素,水平像素,通道数) (596, 452, 3)
图像包含的像素数 808176
图像的数据类型 uint8

通过调用OpenCV接口,可以实现图像的图像的读取、展示和保存,以及查看图像的基本属性,让我们充分的了解图像,为后续图像处理做准备。在使用OpenCV接口的时候,要清楚接口参数的含义和作用,这样才能够操作图像达到我们想要的效果。

点击下载源码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/565983.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Redis常用命令详解

Redis 是Remote Dictionary Service 的简称;也是远程字典服务。它是内存数据库,KV 数据库,数据结构数据库。它是一个单线程的单reactor模型。其交互方式是请求响应方式。在正常情况下,如果向redis发出请求,则一定会有响…

MyBatis 框架

MyBatis 框架 MyBatis 简介搭建 MyBatis 开发环境核心配置文件详解mapper 映射文件(实现增删改查)MyBatis获取参数值的两种方式MyBatis的各种查询功能特殊SQL的执行自定义映射resultMapresultMap 字段和属性的映射多对一映射处理一对多映射处理 动态SQLM…

11 - YOLO算法二 (目标检测)

要点: 三 YOLO v3 3.1 Darknet-53 (backbone) 3.2 目标边界框的预测 将预测的边界框中心限制在当前cell中, s(x) Sigmoid(x) 。 3.3 正负样本的匹配 3.4 损失的计算 3.4.1 置信度损失 (Binary Cross Entropy) 其中 表示预测…

能耗监测系统在淼泉卫生院项目的应用

摘要:随着社会生活水平的提高,经济的繁荣发展,人们对能源的需求逐渐增长,由此带来的能源危机日益严重。办公建筑、医院、商场等场所如何实时的了解、分析和控制能源消耗已成为需要解决的迫在眉睫的难题。传统的能源消耗只能以月/季…

CPU性能优化:分支预测

条件跳转引起的控制冒险虽然也可以通过在流水线中插入空泡来避免,但是当流水线很深时,需要插入更多的空泡。一个20级的流水线为例,如果一条指令需要上一条指令的执行结束才能执行,则需要在这两条指令之间插入19个空泡,…

STL详解— list类的模拟实现

本文章所需实现三个类及其每个类里的各个函数接口总览&#xff1a; namespace zhc {//模拟实现list当中的结点类template<class T>struct list_node{//成员函数list_node(const T& val T()); //构造函数//成员变量T _val; //数据域list_node<T&g…

推荐系统简介

文章目录 推荐系统的分类基于人口统计学的推荐算法基于内容的推荐算法基于协同过滤的推荐算法协同过滤&#xff08;CF&#xff09;推荐方法基于近邻基于用户的协同过滤基于物品的协同过滤 混合推荐推荐系统实验方法离线实验用户调查在线实验 学习下b站上尚硅谷的推荐系统的课程…

易观千帆 | 2023年4月证券APP月活跃用户规模盘点

易观&#xff1a;2023年4月证券服务应用活跃人数13924.88万人&#xff0c;相较上月&#xff0c;环比下降1.46%&#xff0c;同比增长3.64%&#xff1b;2023年4月自营类证券服务应用Top10 活跃人数6144.02万人&#xff0c;环比下降0.01%&#xff1b;2023年4月第三方证券服务应用T…

「远程开发」VSCode使用SSH远程linux服务器 - 公网远程连接(1)

文章目录 前言视频教程1、安装OpenSSH2、vscode配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程 转…

chatgpt赋能python:PythonWorkon-使Python多环境管理更加轻松

Python Workon - 使Python多环境管理更加轻松 Python是一种广泛使用的高级编程语言&#xff0c;在众多开发者中应用广泛。在实际工作中&#xff0c;我们有时需要使用不同版本的Python或不同的环境来开发不同的项目。这时候就需要一个Python环境管理器来帮助我们快速地进行环境…

chatgpt赋能python:PythonWSDL:实现更好的Web服务和集成

Python WSDL&#xff1a;实现更好的Web服务和集成 在现代的互联网世界中&#xff0c;我们面临着不断增长的需求&#xff0c;需要实现与不同系统之间的交互和数据共享。Web服务是一种解决方案&#xff0c;允许应用程序通过互联网相互通信。其中Web服务描述语言&#xff08;WSDL…

python+django在线音乐分享网站系统vue_6045i.

本系统主要包括管理员和用户&#xff1a;主要包括个人中心、用户管理、通知公告管理、音乐类型管理、音乐分享管理、音乐榜单管理、音乐论坛、系统管理等功能的管理系统。 (1)绪论 系统的开发背景&#xff0c;意义和系统状况等&#xff0c;详细讲述了系统的用处&#xff0c;对本…

iOS App外包开发解决闪退问题

在iOS应用开发中&#xff0c;闪退&#xff08;应用程序意外退出&#xff09;是一个常见的问题。为了查找和解决闪退问题&#xff0c;可以使用以下工具和方法。今天和大家分享这方面的知识&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开…

扬州晶澳-年产3GW高性能太阳能光伏组件项目Acrel-3000WEB电能管理系统的设计及应用

摘要&#xff1a;在信息时代&#xff0c;电力信息系统的应用促迚了电力企业的収展&#xff0c;增强了电力系统运行的安全性与稳定性&#xff0c;对满足用户需求其有重要意义。随着国家电网改革政策的逐步推进和落实&#xff0c;Acrel-3000WEB电能管理系统运用互联网和大数据技术…

数据库索引结构(4)---基于B+树的查询

回顾我们学习的线性和课扩展哈希 他们都只能进行等值操作 但是不能进行区间操作 为了进行区间操作和关系的比较和速度考虑 引入数据结构B树 序言:磁盘存储 1. mysql面试题-深入理解B树原理_哔哩哔哩_bilibili 信息是存取在磁盘块中的每个 磁盘最小的存取单位是512KB 要定位磁…

多态的原理、单继承和多继承的虚函数表、以及虚函数表的打印。

一、多态原理 1、下面这个结果是多少&#xff1f; class A { public:virtual void func(){cout << "func()" << endl;}private:int _a 1; };int main() {printf("%d\n", sizeof(A));return 0; } 是 4&#xff1f;8&#xff1f;还是多少&am…

Python星际生存小游戏开发

项目介绍&#xff1a; 项目名称&#xff1a;python星际生存游戏 编程语言&#xff1a;python 用到关键知识&#xff1a;pygame模块&#xff0c;面向对象思想&#xff0c;python基础等等 实现功能&#xff1a; 1&#xff1a;飞机的运动&#xff0c;发射子弹&#xff0c;飞机…

深入探索Apache Flume:大数据领域的数据采集神器【上进小菜猪大数据系列】

&#x1f4ec;&#x1f4ec;我是上进小菜猪&#xff0c;沈工大软件工程专业&#xff0c;爱好敲代码&#xff0c;持续输出干货&#xff0c;欢迎关注。 引言&#xff1a; 随着大数据技术的快速发展&#xff0c;企业和组织需要从各种来源采集海量数据。数据采集是大数据处理流程中…

DTO、VO、BO、PO、DO理解等相关的转换

1、什么是DTO、VO、BO、PO、DO、POJO pojo(domain/entity)一般定义实体类&#xff0c;实体类又被分为VO、BO、 PO、 DTO、DO&#xff1b;通过各层POJO的使用&#xff0c;有助于提高代码的可读性和可维护性。 2、阿里巴巴Java开发规范 DO(Data Object):此对象与数据库表结构一…

chatgpt赋能python:Python的BeautifulSoup库和find_all()方法

Python的Beautiful Soup库和find_all()方法 在Web爬虫中&#xff0c;我们需要从网页中找到特定的HTML标记或属性&#xff0c;以便提取我们需要的数据。对于Python开发人员而言&#xff0c;Beautiful Soup是最流行的解析HTML和XML的库之一。该库可以让我们轻松地从HTML解析器中…