千家信息网

怎么用Python和OpenCV进行图像处理

发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,这篇文章主要介绍"怎么用Python和OpenCV进行图像处理",在日常操作中,相信很多人在怎么用Python和OpenCV进行图像处理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希
千家信息网最后更新 2025年02月03日怎么用Python和OpenCV进行图像处理

这篇文章主要介绍"怎么用Python和OpenCV进行图像处理",在日常操作中,相信很多人在怎么用Python和OpenCV进行图像处理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"怎么用Python和OpenCV进行图像处理"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

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

到此,关于"怎么用Python和OpenCV进行图像处理"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

图像 通道 函数 程序 格式 运行 代码 属性 结果 图像处理 处理 信息 三个 名字 类型 像素 常用 如图 学习 原始 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网高科技实业 数据库表字段大小怎么设置 数据库实际工作应用 软件开发计划表模板下载 win服务器异常自动重启 计算机网络技术可以报考一建么 香河网络安全保卫大队电话 数据库物理名称怎么表示 网络安全人工智能检测算法开源 广州博浩互联网科技有限公司 软件开发需求要素 美国国家车辆管理数据库 实名制案例网络安全法 万德数据库有对外直接投资吗 多iD服务器购买 十八大以来网络安全重大成就 奥巴马网络安全法案 微网互联网络科技有限公司 四川曙光服务器维修系统虚拟主机 数据库计算hash值 工业园区网络安全解决方案 net 服务器线程过多 天津网络技术电话是多少 吉林长春软件开发公司 网络安全法的主要内容手抄报 电脑软件开发报价 实用网络技术论文 华为数通 软件开发 如何学习网络安全法律法规 常熟市瑞信网络技术有限公司
0