Python OpenCV入门到精通学习日记:图像处理基础操作
今天主要是学习了Python OpenCV库在图像处理中的基础操作。OpenCV是一个强大的计算机视觉库,它让图像处理变得简单而高效。我们将通过一系列的实例来学习如何读取、显示、保存图像以及获取图像属性。
前言
在开始前我先说明一下我的项目目录,这样看后面的内容会明了一些
opencv_program/
|—— .venv/ # 虚拟环境文件夹,用于Python项目的依赖管理
|—— Pictures/ # 图片文件夹,存放项目相关的图片文件
| |—— women.jpg # 图片文件
|—— ImageTest.py # Python脚本文件,用于OpenCV图像处理测试
|—— img.png # 图片文件
1. 读取图像
使用cv2.imread()
函数可以轻松读取图像。这个函数接受两个参数:文件名和读取标记。文件名是你要读取的图像的完整路径,而读取标记则指定了读取图像的方式。
import cv2
# 读取图像
filename = "img.png"
flags = 1 # 如果要读取图像的灰度图像,则设置为0
img = cv2.imread(filename, flags) # !!!后续出现的img全部都是这个定义的img
print(img)
其中,flags
参数为1时,读取彩色图像;为0时,读取灰度图像。print(img)
将会输出img.png的部分像素值。
不同路径表达方式:
image = cv2.imread("D:/3.1.jpg") # 路径中不能出现中文
“D:/3.1.jpg"等价于"D:\\3.1.jpg”。
2. 显示图像
读取图像后,我们可以使用cv2.imshow()
函数在窗口中显示图像。cv2.waitKey()
函数用于等待用户输入,当用
户按下键盘上的任意按键时,将执行waitKey()
方法,并且获取waitKey()
方法的返回值。参数以毫秒为单位设置等待时间。cv2.destroyAllWindows()
则用于关闭所有窗口。
cv2.imshow("women", img) # 显示图像
"""
cv2.imshow(winname, mat)
参数说明:
winname:显示图像的窗口名称。
mat:要显示的图像。
"""
cv2.waitKey() # 等待键盘输入
"""
retval = cv2.waitKey(delay)
参数说明:
retval:与被按下的按键对应的ASCII码。例如,Esc键的
ASCII码是27,当用户按Esc键时,waitKey()方法的返回值
是27。如果没有按键被按下,waitKey()方法的返回值
是-1。
delay:等待用户按下键盘上按键的时间,单位为毫秒
(ms)。当delay的值为负数、0或者空时,表示无限等待
用户按下键盘上按键的时间。
"""
cv2.destroyAllWindows() # 关闭窗口
如果想设置窗口显示图像的时间为5s,又该如何编写代码呢?
只需将代码:
cv2.waitKey()
修改为如下代码:
cv2.waitKey(5000)
注意:显示图像的窗口名称不能使用中文,否则会出现乱码。
3. 保存图像
cv2.imwrite()
函数允许我们保存图像到指定路径。
cv2.imwrite("./Pictures/women.jpg", img) # 保存图像
"""
cv2.imwrite(filename, img)
参数说明:
filename:保存图像时所用的完整路径。
img:要保存的图像。
"""
4. 获取图像属性
我们可以获取图像的形状、大小和数据类型,这些属性对于图像处理非常重要。
print("获取彩色图像的属性:")
print("shape=", img.shape)
print("size=", img.size)
print("dtype=", img.dtype)
image_Gray = cv2.imread("img.png",0)
print("获取的灰度图像的属性:")
print("shape=",image_Gray.shape)
print("size=",image_Gray.size)
print("dtype=",image_Gray.dtype)
shape
:它是一个包含图像水平像素,垂直像素和通道数的数组,如果是灰度图像,通道数为1。
size
:它是图像包含的像素个数,其值为“水平像素×垂直像素×通道数”。
dtype
:它是图像的数据类型。
上述代码运行将会获得:
>>> 获取彩色图像的属性:
shape= (372, 383, 3)
size= 427428
dtype= uint8
获取的灰度图像的属性:
shape= (372, 383)
size= 142476
dtype= uint8
小结
这些基础操作是OpenCV图像处理的基石。通过这些操作,我们可以轻松地处理和分析图像数据,为更高级的图像处理任务打下坚实的基础。
在完成图像处理的基本操作的过程中,要注意两个问题:一是通过更改参数,imread()方法读取到的图像既可以是一幅彩色图
像,也可以是一幅灰度图像;二是为了能够正常显示图像,要在cv2.imshow()方法后紧跟着cv2.waitKey()方法,还有就是关于retval的使用,可以指定某个键来执行cv2.waitKey()。
明天准备学像素的操作,冲!!!