图像的读取、显示和保存

lena.png

可以使用cv.imread()函数读取图像。第一个参数是图片的路径,第二个参数是图片被读取的方式,包括以下几种:

我们也可以分别使用参数10-1代替。

例如

1
2
3
import cv2 as cv
image = cv.imread('pic/lena.png')  # 读取lena图像
print(image)

运行代码会得到lena图像的像素值:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
[[[125 137 226]
[125 137 226]
[133 137 223]
...
[122 148 230]
[110 130 221]
[ 90 99 200]]

[[125 137 226]
[125 137 226]
[133 137 223]
...
[122 148 230]
[110 130 221]
[ 90 99 200]]

[[125 137 226]
[125 137 226]
[133 137 223]
...
[122 148 230]
[110 130 221]
[ 90 99 200]]

...

[[ 60 18 84]
[ 60 18 84]
[ 58 27 92]
...
[ 84 73 173]
[ 76 68 172]
[ 79 62 177]]

[[ 57 22 82]
[ 57 22 82]
[ 62 32 96]
...
[ 79 70 179]
[ 81 71 181]
[ 81 74 185]]

[[ 57 22 82]
[ 57 22 82]
[ 62 32 96]
...
[ 79 70 179]
[ 81 71 181]
[ 81 74 185]]]

注意:

即使图像路径错误,也不会引发任何错误,只是print(img)会给出None

显示图像

namedWindow()用来创建指定的窗口,例如

1
cv2.namedWindow("image")

会创建一个名字为image的窗口。

imshow()函数用来显示图像,一般格式如下:

1
None = cv2.imshow(window, image)

其中,window是窗口的名字,image是要显示的图像。

waitKey()函数用来等待按键,当有按键被按下时,该语句执行,一般格式如下:

1
retval = cv2.waitKey([delay])

delay表示等待键盘触发的时间(单位:ms),当该值为负或0时表示无限等待,默认为0。

destroyAllWindows()用来释放所有窗口,一般格式为:

1
None = cv2.destroyAllWindows()

如果要释放任何特定的窗口,我们可以使用函数cv.destroyWindow()并在在其中传递确切的窗口名称作为参数。

代码示例:

1
2
3
4
5
6
7
import cv2 as cv

image = cv.imread('pic/lena.png')
cv.namedWindow('image')
cv.imshow('image', image)
cv.waitKey()
cv.destroyAllWindows()

产生如下窗口:

屏幕截图 2025-01-19 154224.png

保存图像

使用函数cv2.imwrite()保存图像。

第一个参数是文件名,第二个参数是要保存的图像。

1
2
3
4
import cv2 as cv

image = cv.imread('pic/lena.png')
cv.imwrite('pic/lenaresult.png')

图像通道的基本操作

split()拆分函数

一般格式:

1
b, g, r = cv2.split(img)

例如:

1
2
3
4
5
6
7
8
9
10
import cv2 as cv

image = cv.imread('pic/lena.png')
b, g, r = cv.split(image)
cv.imshow('image', image)
cv.imshow('b', b)
cv.imshow('g', g)
cv.imshow('r', r)
cv.waitKey()
cv.destroyAllWindows()

效果如下:

屏幕截图 2025-01-19 170443.png

merge()合并函数

通道合并是通道拆分的逆过程,可以将三个通道的灰度图像合并为一张彩色图像。基本格式为:

1
imagebgr = cv2.merge([b, g, r])

例如:

1
2
3
4
5
6
7
8
9
import cv2 as cv

image = cv.imread('pic/lena.png')
b, g, r = cv.split(image)
imagebgr = cv.merge([b, g, r])
cv.imshow('image', image)
cv.imshow('imagebgr', imagebgr)
cv.waitKey()
cv.destroyAllWindows()

图像属性的获取

在进行图像处理时经常需要获取图像的大小、类型等属性信息。

  • shape:表示图像的大小。如果是彩色图像,则返回包含行数、列数和通道数的数组;如果是二值图像或灰度图像,则返回包含行数和列数的数组。
  • size:表示返回的图像的像素数目。
  • dtype:表示返回的图像的数据类型。

例如:

1
2
3
4
5
6
import cv2 as cv

image = cv.imread('pic/lena.png')
print("image.shape", image.shape)
print("image.size", image.size)
print("image.dtype", image.dtype)
1
2
3
image.shape (512, 512, 3)
image.size 786432
image.dtype uint8