颜色空间转换
1、目标
颜色空间转换,如BGR↔Gray,BGR↔HSV等
追踪视频中特定颜色的物体
OpenCV函数:cv2.cvtColor(),cv2.inRange()
2、颜色空间转换

cv2.cvtColor()用来进行颜色模型转换,参数1是要转换的图片,参数2是转换模式, COLOR_BGR2GRAY表示BGR→Gray,可用下面的代码显示所有的转换模式:
颜色转换其实是数学运算,如灰度化最常用的是:gray=R0.299+G0.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来只显示视频中蓝色物体的例子,步骤如下:
1.捕获视频中的一帧
2.从BGR转换到HSV
3.提取蓝色范围的物体
4.只显示蓝色物体
其中,bitwise_and()函数暂时不用管,后面会讲到。那蓝色的HSV值的上下限lower和upper范围是怎么得到的呢?其实很简单,我们先把标准蓝色的BGR值用cvtColor()转换下:
结果是[120, 255, 255],所以,我们把蓝色的范围调整成了上面代码那样。
经验之谈:Lab颜色空间也经常用来做颜色识别,有兴趣的同学可以了解下。
4、小结
cv2.cvtColor()函数用来进行颜色空间转换,常用BGR↔Gray,BGR↔HSV。
HSV颜色模型常用于颜色识别。要想知道某种颜色在HSV下的值,可以将它的BGR值用cvtColor()转换得到。
5、练习
尝试在视频中同时提取红色、蓝色、绿色的物体。(效果如下)
引用
本节源码
http://t.cn/EcHGxG2
Basic Operations on Images
http://t.cn/EcHGCCU