Opencv(二)-图像处理
颜色空间转换
目标:
你将学习如何对图像进行颜色空间转换,比如从 BGR 到灰度图,或者从BGR 到 HSV 等。
我没还要创建一个程序用来从一幅图像中获取某个特定颜色的物体。
我们将要学习的函数有:cv2.cvtColor(),cv2.inRange() 等。
1、转换颜色空间
在 OpenCV 中有超过 150 中进行颜色空间转换的方法。但是你以后就会、发现我们经常用到的也就两种:BGR↔Gray 和 BGR↔HSV。
我们要用到的函数是:cv2.cvtColor(input_image ,flag),其中 flag就是转换类型。
对于 BGR↔Gray 的转换,我们要使用的 flag 就是 cv2.COLOR_BGR2GRAY。
同样对于 BGR↔HSV 的转换,我们用的 flag 就是 cv2.COLOR_BGR2HSV。
你还可以通过下面的命令得到所有可用的 flag。
1 | import cv2 |
注意:在 OpenCV 的 HSV 格式中,H(色彩/色度)的取值范围是 [0,179],S(饱和度)的取值范围 [0,255],V(亮度)的取值范围 [0,255]。
2、物体跟踪
现在我们知道怎样将一幅图像从 BGR 转换到 HSV 了,我们可以利用这一点来提取带有某个特定颜色的物体。在 HSV 颜色空间中要比在 BGR 空间中更容易表示一个特定颜色。在我们的程序中,我们要提取的是一个蓝色的物体。下面就是就是我们要做的几步:
- 从视频中获取每一帧图像
- 将图像转换到HSV空间
- 设置HSV阈值到蓝色范围
- 获取蓝色物体
代码如下:
1 | import cv2 |
注意:
- cv2.inRange函数用于设阈值,去除背景部分,只保留蓝色物体部分。
- 从cv2.bitwise_and是对二进制数据进行“与”操作,即对图像(灰度图像或彩色图像均可)每个像素值进行二进制“与”操作。前两个参数是“与”操作的操作对象,mask参数指定使用的模板。
结果如下:
3、怎样找到要跟踪对象的HSV值
函数 cv2.cvtColor() 也可以用到这里。但是现在你要传入的参数是(你想要的)BGR 值而不是一副图。例如,我们要找到绿色的 HSV 值,我们只需在终端输入以下命令:
1 | import cv2 |
现在你可以分别用 [H-10,100,100] 和 [H+10,255,255] 做上下阈值。