Py学习  »  Python

【视觉与图像】Python+OpenCV入门教程4:图像基本操作

天池大数据科研平台 • 5 年前 • 538 次点击  

聊完Python+OpenCV的打开摄像头专题,同学们的反应热烈~在这年味十足的倒计时里,那么接下来等着你们的就是Python+OpenCV教程4:图像基本操作。


学习获取和修改像素点的值,ROI感兴趣区域,通道分离合并等基本操作等。

【图片可到文末本节源码下载。】


图像基本操作

01
目标


  • 访问和修改图片像素点的值

  • 获取图片的宽、高、通道数等属性

  • 了解感兴趣区域ROI

  • 分离和合并图像通道


02
获取和修改像素点值


我们先读入一张图片:


通过行列的坐标来获取某像素点的值,对于彩色图,结果是B,G,R三个值的列表,对于灰度图或单通道图,只有一个值:




还记得吗?行对应y,列对应x,所以其实是img[y, x],需要注意噢(●ˇ∀ˇ●)。容易混淆的话,可以只记行和列,行在前,列在后。

修改像素的值也是同样的方式:



注意:这步操作只是内存中的img像素点值变了,因为没有保存,所以原图并没有更改。


03
图片属性


img.shape 获取图像的形状,图片是彩色的话,返回一个包含行数(高度)、列数(宽度)和通道数的元组,灰度图只返回行数和列数:



img.dtype 获取图像数据类型:




img.size 获取图像总像素数:


04
ROI


ROI:Region of Interest,感兴趣区域。什么意思呢?比如我们要检测眼睛,因为眼睛肯定在脸上,所以我们感兴趣的只有脸这部分,其他都不care,所以可以单独把脸截取出来,这样就可以大大节省计算量,提高运行速度。


只关心脸( ╯□╰ )


截取ROI非常简单,指定图片的范围即可(后面我们学了特征后,就可以自动截取辣,(ง •_•)ง):



05
通道分割和合并


彩色图的BGR三个通道是可以分开单独访问的,也可以将单独的三个通道合并成一副图像。分别使用cv2.split()cv2.merge()



split()函数比较耗时,更高效的方式是用numpy中的索引,如提取B通道:



06
小结


  • img[y,x]获取/设置像素点值,img.shape:图片的形状(行数、列数、通道数),img.dtype:图像的数据类型。

  • img[y1:y2,x1:x2]进行ROI截取,cv2.split()/cv2.merge()通道分割/合并。更推荐的获取单通道方式:b = img[:, :, 0]


07
练习


  1. 打开lena.jpg,将帽子部分(高:25~120,宽:50~220)的红色通道截取出来并显示。


引用

  • 本节源码 http://t.cn/EtYJ9u8

  • Basic Operations on Images http://t.cn/EtYJcKN


小天
有话说


如果你也有想分享的干货,可以登录天池实验室(notebook,包括赛题的理解、数据分析及可视化、算法模型的分析以及一些核心的思路等内容。

小天会根据你分享内容的数量以及程度,给予丰富的神秘天池大礼以及粮票奖励。分享成功后你也可以通过下方钉钉群👇主动联系我们的社区运营同学(钉钉号:doqclsn 或 yiwen1991



天池宝贝们有任何问题,可在戳“留言”评论或加入钉钉群留言,小天会认真倾听每一个你的建议!


听说戳了的人会变👇


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/PomuKSC9M3
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/28505
 
538 次点击