本期将使用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 读取图片并展示
- 在
code
文件夹下创建img_show.py
文件; - 读取
dataset
文件夹下的flower.jpg
图片,并进行展示,标题为 flower ; - 无限等待用户输入按键,按下按键后销毁所有窗口。
代码实现
# 导入OpenCV
import cv2
# 读取彩色图像
img = cv2.imread('../dataset/flower.jpg')
# 展示图像
cv2.imshow("flower",img)
# 等待用户输入
cv2.waitKey(0)
# 销毁所有窗口
cv2.destroyAllWindows()
3. 使用 OpenCV 读取灰度图片并保存
- 在
code
文件夹下创建img_save.py
文件; - 读取
dataset
文件夹下的flower.jpg
图片,转换为灰度图,并进行展示,标题为flower ; - 将灰度图片以
gray_img.jpg
保存至dataset
文件夹下; - 无限等待用户输入按键,按下按键后销毁所有窗口。
代码实现
# 导入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()
![](dataset\gary_img.jpg)
4. 打印图像的属性
- 在
code
文件夹下创建img_attributes.py
文件; - 读取
dataset
文件夹下的flower.jpg
图片; - 打印图像的(垂直像素,水平像素,通道数)、像素数 、数据类型。
代码实现
# 导入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接口的时候,要清楚接口参数的含义和作用,这样才能够操作图像达到我们想要的效果。