导读:图像是由若干个像素组成的,因此,图像处理可以看作计算机对像素的处理。在面向Python的OpenCV中,可以通过位置索引的方式对图像内的像素进行访问和处理。

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

作者:高敬鹏 江志烨 赵娜

来源:大数据DT(ID:hzdashuju)

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

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

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

赵娜,博士学历,讲师,任职于重庆电子工程职业学院。

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

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

点击上图了解及购买

转载请联系微信:DoctorData

推荐语:依照由浅入深、循序渐进的原则编写,并与大量实例相结合,使读者可以边学边练,从而提高学习的兴趣与效率。

划重点????

干货直达????

  • 西安交大送大一新生这本书,你读过吗?12本有趣有料的科普书盘点

  • 终于有人把AI、BI、大数据、数据科学讲明白了

  • 监督学习、非监督学习、强化学习都是什么?终于有人讲明白了

  • 一条SQL引发的“血案”:与SQL优化相关的4个案例

更多精彩????

在公众号对话框输入以下关键词

查看更多优质内容!

PPT | 读书 | 书单 | 硬核 | 干货 讲明白 | 神操作

大数据 | 云计算 | 数据库 | Python | 可视化

AI | 人工智能 | 机器学习 | 深度学习 | NLP

5G | 中台 | 用户画像 1024 | 数学 | 算法 数字孪生

据统计,99%的大咖都完成了这个神操作

????

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

  1. python流程控制-实战案例手把手教你Python流程控制技巧

    原标题:实战案例手把手教你Python流程控制技巧 作者:PianoOrRock 来源: http://blog.csdn.net/pianoorrock/article/details/711315 ...

  2. python 靶心_手把手教你使用Python实战反欺诈模型|原理+代码

    原标题:手把手教你使用Python实战反欺诈模型|原理+代码 作者 | 萝卜 来源 | 早起Python(ID: zaoqi-python) 本文将基于不平衡数据,使用Python进行 反欺诈模型数据 ...

  3. garch预测 python_【2019年度合辑】手把手教你用Python做股票量化分析

    引言 不知不觉,2019年已接近尾声,Python金融量化公众号也有一年零两个月.公众号自设立以来,专注于分享Python在金融量化领域的应用,发布了四十余篇原创文章,超过两万人关注.这一路走来,有过 ...

  4. 用python画皇冠_手把手教你用 Python 绘制酷炫的桑基图!

    原标题:手把手教你用 Python 绘制酷炫的桑基图! 作者 | 周志鹏 责编 | 郭 芮 最近,不止一次收到小伙伴的截图追问: "这个图叫什么???" "这个图真好看! ...

  5. oracle数据库更新语句_20_手把手教你学Python之操作数据库

    数据库是数据的仓库,将大量数据按照一定的方式组织并存储起来,方便进行管理和维护,例如快速检索和统计等.数据库的主要特点: 以一定的方式组织.存储数据: 能为多个用户共享: 与程序彼此独立. -- 数据 ...

  6. 手把手教你用Python求均值、中值和众数

    导读:数据科学入门:集中趋势度量--均值.中值和众数. 作者:保罗·戴特尔(Paul Deitel).哈维·戴特尔(Harvey Deitel) 来源:大数据DT(ID:hzdashuju) 本文我们 ...

  7. 手把手教你python实现量价形态选股知乎_【手把手教你】Python实现量价形态选股...

    来源:雪球App,作者: Python金融量化,(https://xueqiu.com/1444657641/139331726) 01引言 在股票市场上,一切交易行为的成功皆为概率事件,交易获利的核 ...

  8. 手把手教你用Python批量实现在Excel后里面新加一列,并且内容为excel 表名(附源码)...

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 打起黄莺儿,莫教枝上啼. 大家好, ...

  9. python人脸识别门禁系统毕设_开源|手把手教你用Python进行人脸识别(附源代码)...

    原标题:开源|手把手教你用Python进行人脸识别(附源代码) 全球人工智能 来源:Github 翻译:黄玮 想要了解目前世界上最简洁的人脸识别库吗?现在小编带大家来学习使用Python语言或命令行进 ...

最新文章

  1. Android selector
  2. 90% 程序员都吃亏在这门技术上了,你呢!
  3. numpy 最大值_第 85 天:NumPy 统计函数
  4. 解决linux yum无法安装mysql
  5. 火狐浏览器怎么打不开网页
  6. groovy定义变量获取当前时间_groovy变量 - Groovy教程
  7. nginx实现rtmp,flv,mp4流媒体服务器
  8. 微信加好友,提示操作过于频繁 ,有什么办法解决
  9. android 根据宽度调整字体大小,android根据分辨率自动调整字体大小的实例代码
  10. 多实践、少扯淡,生死看淡,不服就干
  11. 2021-03-13 大数据课程笔记 day52
  12. C语言之#define,#ifdef,typedef,extern,statis,__weak的用法,看懂stm32中的.h和.c文件
  13. 极路由虚拟服务器设置,极路由初始化设置详细图文教程
  14. 联想笔记本PE启动热键
  15. Sublime Plugin - Python PEP8 Autoformat
  16. VMware虚拟机怎么用U盘装win7系统
  17. 彭亮—Python学习
  18. 影视公司触网意在大数据
  19. C语言从菜鸟到笨鸟 第一天
  20. 前端高频面试题-非框架

热门文章

  1. Arduino笔记-对开关的基本认识
  2. Qt文档阅读笔记-windowOpacity官方解析及实例(两种方法使得程序渐变出现)
  3. python列表修改函数_python 禁止函数修改列表的实现方法
  4. python第一课教案_Python第一课
  5. docker 搭建指定版本的cas_Docker搭建-生成SpringBoot项目脚手架-各版本
  6. python定义符号常量_python从零开始学习(二):python中的变量与常量
  7. (计算机组成原理)第二章数据的表示和运算-第四节2:本节习题
  8. 二叉树经典题之根据二叉树创建字符串(二叉树的括号表示法)
  9. centos查看yum包所有版本(查看包版本)
  10. Linux系统安装证书(ubuntu、centos7)