放弃C+,这是推荐使用Python来开发OpenCV的第五个教程!

导语:有不少刚看到此文的同学会问:为什么要安利Python来开发OpenCV呢?其实细心的小伙伴早在

【视觉与图像】Python+OpenCV教程入门篇

,就找到了想要的答案。

hello艾瑞巴蒂!新年好呀!

今天上班的一定不止小天一个人!

年前小天邀请老王和大家聊到Python+OpenCV的第4篇章:图像基本操作,同学们就巴巴等着下一节教程惹!那么接下来老王要放出的大招就是Python+OpenCV教程第5招:颜色空间转换。

学习如何进行图片的颜色空间转换,视频中追踪特定颜色的物体。

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

颜色空间转换

1

目标

颜色空间转换,如BGR↔Gray,BGR↔HSV等

追踪视频中特定颜色的物体

OpenCV函数:cv2.cvtColor(),cv2.inRange()

02

颜色空间转换

cv2.cvtColor()用来进行颜色模型转换,参数1是要转换的图片,参数2是转换模式,COLOR_BGR2GRAY表示BGR→Gray,可用下面的代码显示所有的转换模式:

颜色转换其实是数学运算,如灰度化最常用的是:gray=R*0.299+G*0.587+B*0.114。

03

视频中特定颜色物体追踪

HSV是一个常用于颜色识别的模型,相比BGR更易区分颜色,转换模式用COLOR_BGR2HSV表示。

经验之谈:OpenCV中色调H范围为[0,179],饱和度S是[0,255],明度V是[0,255]。虽然H的理论数值是0°~360°,但8位图像像素点的最大值是255,所以OpenCV中除以了2,某些软件可能使用不同的尺度表示,所以同其他软件混用时,记得归一化。

现在,我们实现一个使用HSV来只显示视频中蓝色物体的例子,步骤如下:

捕获视频中的一帧

从BGR转换到HSV

提取蓝色范围的物体

只显示蓝色物体

其中,bitwise_and()函数暂时不用管,后面会讲到。那蓝色的HSV值的上下限lower和upper范围是怎么得到的呢?其实很简单,我们先把标准蓝色的BGR值用cvtColor()转换下:

结果是[120, 255, 255],所以,我们把蓝色的范围调整成了上面代码那样。

经验之谈:Lab颜色空间也经常用来做颜色识别,有兴趣的同学可以了解下。

04

小结

cv2.cvtColor()函数用来进行颜色空间转换,常用BGR↔Gray,BGR↔HSV。

HSV颜色模型常用于颜色识别。要想知道某种颜色在HSV下的值,可以将它的BGR值用cvtColor()转换得到。

05

练习

尝试在视频中同时提取红色、蓝色、绿色的物体。(效果如下)

引用

本节源码http://t.cn/EcHGxG2

Basic Operations on Imageshttp://t.cn/EcHGCCU

小天

有话说

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

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

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190211G11I9M00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券