6个案例手把手教你用Python和OpenCV进行图像处理
导读:图像是由若干个像素组成的,因此,图像处理可以看作计算机对像素的处理。在面向Python的OpenCV中,可以通过位置索引的方式对图像内的像素进行访问和处理。
本文手把手教你图像处理的基本操作。
01 图像的读取、显示和保存
OpenCV提供了cv2模块,用于进行图像的处理操作。
1. 读取图像
OpenCV提供了cv2.imread()函数用于进行图像的读取操作。该函数的基本格式为:
retval = cv2.imread(filename[, flags])
其中:
retval是返回值,其值是读取到的图像。
filename是要读取图像的完整文件名。
flags是读取标记,用来控制读取文件的类型。部分常用的标记值如表3-1所示,其中第一列的值与第三列的数值表示的含义一致。
-
例3-1 使用cv2.imread()函数读取一幅图像
import cv2 as cv
image = cv2.imread("F:/picture/lena.png") # 读取lena图像
print(image)
None = cv2.namedWindow(window)
cv2.namedWindow("image")
None = cv2.imshow(window, image)
-
window是窗口的名字。 -
image是要显示的图像。
retval= cv2.waitKey([delay])
-
retval是返回值。 -
delay表示等待键盘触发的时间,单位是ms。当该值为负数或0时表示无限等待,默认值为0。
None = cv2. destroyAllWindows ()
-
例3-2 显示读取的图像
import cv2 as cv # 导入从cv2模块
image = cv.imread("F:/picture/lena.png") # 读取lena图像
cv.namedWindow("image") # 创建一个image的窗口
cv.imshow("image", image) # 显示图像
cv.waitKey() # 默认为0,无限等待
cv.destroyAllWindows() # 释放所有窗口
retval= cv2.imwrite(filename, img[, params])
-
retval是返回值。 -
filename是要保存的图像的完整路径名,包括文件的扩展名。 -
img是要保存的图像的名字。 -
params是保存的类型参数,可选。
-
例3-3 编写程序,将读取到的图像保存
import cv2 as cv # 导入从cv2模块
image = cv.imread("F:/picture/lena.png") # 读取lena图像
cv.imwrite("F:/picture/lenaresult.png",image) #将图像保存到F:/picture/下,名字为lenaresult
b,g,r = cv2.split(img)
-
b、g、r分别是B通道、G通道、R通道的图像信息。 -
img是要拆分的图像。
-
例3-4 编写程序,使用split()函数对图像进行拆分
import cv2 as cv
image = cv.imread("F:/picture/lena.png")
b,g,r = cv.split(image) # 拆分图像通道分为b,g,r三个通道
cv.imshow("b",b) # 显示b通道的图像信息
cv.imshow("g",g) # 显示g通道的图像信息
cv.imshow("r",r) # 显示r通道的图像信息
cv.imshow("image", image)
cv.waitKey()
cv.destroyAllWindows()
imagebgr = cv2.merge([b,g,r])
-
imagebgr是合并后的图像。 -
b、g、r分别是B通道、G通道、R通道的图像信息。
-
例3-5 编写程序,演示合并图像的过程
import cv2 as cv
image = cv.imread("F:/picture/lena.png")
b,g,r = cv.split(image) # 拆分图像通道分为b,g,r三个通道
imagebgr = cv.merge([b,g,r]) # 将b,g,r三个通道的图像合并
cv.imshow("image", image)
cv.imshow("imagegbgr", imagebgr)
cv.waitKey()
cv.destroyAllWindows()
-
shape:表示图像的大小。如果是彩色图像,则返回包含行数、列数和通道数的数组;如果是二值图像或灰度图像,则返回包含行数和列数的数组。 -
size:表示返回的图像的像素数目。 -
dtype:表示返回的图像的数据类型。
-
例3-6 编写程序,观察图像的属性值
import cv2 as cv
image = cv.imread("F:/picture/lena.png")
print("image.shape",image.shape) # 输出图像的大小属性
print("image.size",image.size) # 输出图像的像素数目属性
print("image.dtype",image.dtype) # 输出图像的类型属性
image.shape (512, 512, 3)
image.size 786432
image.dtype uint8
关于作者:高敬鹏,博士学历,硕士生导师,2002年至今,任职于哈尔滨工程大学信息与通信工程学院。研究方向主要包括人工智能、机器学习、图像处理、信号检测、目标识别、现代通信技术与电子系统等。
江志烨,博士学历,研究员,任职于北京航天长征飞行器研究所。
赵娜,博士学历,讲师,任职于重庆电子工程职业学院。
本文摘编自《机器学习:基于OpenCV和Python的智能图像处理》,经出版方授权发布。
转载请联系微信:DoctorData
推荐语:依照由浅入深、循序渐进的原则编写,并与大量实例相结合,使读者可以边学边练,从而提高学习的兴趣与效率。
评论