伍佰目录 短网址
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

6个案例手把手教你用Python和OpenCV进行图像处理

来源:本站原创 浏览:109次 时间:2022-04-29

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


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


1. 读取图像


OpenCV提供了cv2.imread()函数用于进行图像的读取操作。该函数的基本格式为:


retval = cv2.imread(filename[, flags])


其中:


  • retval是返回值,其值是读取到的图像。

  • filename是要读取图像的完整文件名。

  • flags是读取标记,用来控制读取文件的类型。部分常用的标记值如表3-1所示,其中第一列的值与第三列的数值表示的含义一致。


▲表3-1 常用flags标记值

  • 例3-1 使用cv2.imread()函数读取一幅图像


代码如下:

import cv2 as cv
image = cv2.imread("F:/picture/lena.png")      # 读取lena图像
print(image)

运行代码会得到lena图像的像素值,如图3-3所示。
▲图3-3 lena图像部分像素值
2. 显示图像
OpenCV提供了多个与图像显示有关的函数,下面简单介绍常用的几个。
namedWindow()函数用来创建指定的窗口,一般格式如下:
None = cv2.namedWindow(window)

其中,window是窗口的名字。例如:
cv2.namedWindow("image")

这句程序会新建一个名字为image的窗口。
imshow()函数用来显示图像,其一般格式如下:
None = cv2.imshow(window, image)

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


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

retval= cv2.waitKey([delay])

其中:
  • retval是返回值。
  • delay表示等待键盘触发的时间,单位是ms。当该值为负数或0时表示无限等待,默认值为0。


destroyAllWindows函数用来释放所有窗口,其一般格式为:

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()      # 释放所有窗口

程序运行结果如图3-4所示。
▲图3-4 例3-2的运行结果
3. 保存图像
OpenCV中提供了cv2.imwrite()函数来保存图像,其一般格式为:
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


02 图像通道的基本操作
在图像处理过程中,有时会根据需要对通道进行拆分与合并。在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 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()

程序运行结果如图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 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()

程序运行结果如图3-6所示。
▲图3-6 例3-5的运行结果:a)原始图像b)拆分并合并后的图像
其中,图3-6a是原始图像,图3-6b是经过拆分后又合并的图像。

03 图像属性的获取
在进行图像处理时经常需要获取图像的大小、类型等属性信息。下面介绍几个常用属性。
  • 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



  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net