首页 > 编程知识 正文

python项目实例,python图像处理实例

时间:2023-05-05 18:13:19 阅读:30521 作者:3135

导读:图像由多个像素构成,因此图像处理可视为计算机对像素的处理。 针对Python的OpenCV允许以位置索引方式访问和处理图像中的像素。

本文教手把手图像处理的基本操作。

作者:活泼的阿里lydrjb生动的未来

资料来源:大数据dt(id:hzdashuju ) )。

01 图像的读取、显示和保存

OpenCV提供了用于处理图像操作的cv2模块。

1. 读取图像

OpenCV提供了用于执行图像读取操作的cv2.imread )函数。 函数的基本格式如下:

retval=cv2.imread(filename (,flags] ) )其中:

retval是返回值,该值是读取的图像。filename是要读取的图像的完整文件名。flags是读取标志,用于控制要读取的文件类型。 如表3-1所示,第1列的值与第3列的数值表示的含义一致。

表3-1一般flags标记值

例3-1 使用cv2.imread()函数读取一幅图像代码如下:

读取导入c v2 ascvimage=cv2.im read (f :/picture/lena.png ) lena图像print(image )运行码,如图3-3所示,Lena图像的

图3-3 lena图像部分的像素值

2. 显示图像

OpenCV提供了几个与图像显示相关的函数。 下面是一些常见的例子。

namedWindow ()函数用于创建指定的窗口。 常见格式如下:

none=cv2.namedwindow(window )其中window是窗口的名称。 例如:

cv2 .命名窗口(image ) )此程序创建一个名为image的新窗口。

imshow ) )函数用于显示图像,常见格式如下:

none=cv2.im show (窗口,image )其中:

window是窗口的名称。image是要显示的图像。 waitKey ()函数用于等待键,并在按下键时执行语句。 一般格式如下。

retval=cv2.waitkey([Delay] )其中:

retval是返回值。delay表示等待键盘触发的时间,单位为ms。 如果此值为负数或0,则表示无限等待,默认值为0。 destroyAllWindows函数用于释放所有窗口,常见格式如下:

None=cv2.destroyAllWindows ()例3-2 显示读取的图像代码如下:

从importcv2ascv#导入cv2模块image=cv.im read (' f :/picture/Lena.png ' )读取Lena映像cv.namedwindow ),然后单击cv.destroyAllWindows ) #执行所有窗口程序的结果如图3-4所示。

图3-4例3-2的运行结果

3. 保存图像

OpenCV提供了用于存储图像的cv2.imwrite )函数,其常见格式如下:

retval=cv2.imwrite(filename,img (,params] ) )其中:

retval是返回值。filename是要保存的映像的完整路径名,包括文件扩展名。img是要保存的图像的名称。params是保存的类型参数,可选。例3-3 编写程序,将读取到的图像保存代码如下:

导入c v2 ascv #导入从cv2模块image=cv.im read (f :/picture/lena.png )导入Lena图像cv.imwrite ) f :/pictuure

p>

在图像处理过程中,有时会根据需要对通道进行拆分与合并。在OpenCV中提供了split()和merge()函数对图像进行拆分与合并。下面对这两个函数进行介绍。

1. split()拆分函数

函数split()可以拆分图像的通道,例如BGR图像的三个通道。其一般格式如下:

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

其中:

b、g、r分别是B通道、G通道、R通道的图像信息。img是要拆分的图像。例3-4 编写程序,使用split()函数对图像进行拆分

代码如下:

import cv2 as cvimage = 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()

程序运行结果如图3-5所示。

▲图3-5 例3-4的运行结果:a)原始图像,b)B通道图像,c)G通道图像,d)R通道图像

其中,图3-5a是原图,图3-5b是B通道的图像,图3-5c是G通道的图像,图3-5d是R通道的图像。

2. merge()合并函数

通道合并是通道拆分的逆过程,可以将三个通道的灰度图像合并为一张彩色图像。OpenCV中提供了merge()函数来实现图像通道的合并,其基本格式为:

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

其中:

imagebgr是合并后的图像。b、g、r分别是B通道、G通道、R通道的图像信息。例3-5 编写程序,演示合并图像的过程

代码如下:

import cv2 as cvimage = 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()

程序运行结果如图3-6所示。

▲图3-6 例3-5的运行结果:a)原始图像 b)拆分并合并后的图像

其中,图3-6a是原始图像,图3-6b是经过拆分后又合并的图像。

03 图像属性的获取

在进行图像处理时经常需要获取图像的大小、类型等属性信息。下面介绍几个常用属性。

shape:表示图像的大小。如果是彩色图像,则返回包含行数、列数和通道数的数组;如果是二值图像或灰度图像,则返回包含行数和列数的数组。size:表示返回的图像的像素数目。dtype:表示返回的图像的数据类型。例3-6 编写程序,观察图像的属性值

代码如下:

import cv2 as cvimage = 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 786432image.dtype uint8

关于作者:活泼的蚂蚁,博士学历,硕士生导师,2002年至今,任职于哈尔滨工程大学信息与通信工程学院。研究方向主要包括人工智能、机器学习、图像处理、信号检测、目标识别、现代通信技术与电子系统等。

lydrjb,博士学历,研究员,任职于北京航天长征飞行器研究所。

生动的未来,博士学历,讲师,任职于重庆电子工程职业学院。

本文摘编自《机器学习:基于OpenCV和Python的智能图像处理》,经出版方授权发布。

延伸阅读《机器学习:基于OpenCV和Python的智能图像处理》

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。