在HSV颜色空间的物体跟踪代码示例及效果cv2.inRange函数使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_35732969/article/details/83753332

对于上面的照片(差不对3年前用努比亚手机拍的~哈哈),如何定位(突出)它的果实?这里简单地采用HSV空间颜色过滤的方法。

首先把BGR转到HSV,具体原理参考博文“图像处理之彩色图像处理简介”,代码如下:

img = cv2.imread('../material/images/IMG_20150107_131650.jpg')
img_hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)

然后用cv2.inRange()函数生成一个二值灰度模板:

#opencv中,H(色度)范围[0,179],S(饱和度)范围[0,255],V(亮度)范围[0,255]
lower_red = np.array([0,60,0])
upper_red = np.array([7,255,255])

mask = cv2.inRange(img_hsv,lower_red,upper_red)
plt.imshow(mask,cmap="gray")

模板效果如下:

cv2.inRange()函数起过滤的作用,第二、第三个参数分别是下届和上界,在上下界之间的置255,其他的置0,所以它返回的是一个二值灰度图。另外,因为上面代码中img_hsv是HSV空间的值,所以上下界也都是HSV空间的值。至于怎么知道需要的HSV,可以直接用HSV在线转化工具。

最后,用“与”操作函数cv2.bitwise_and()把生成的模板“盖到”原图就可以了:

res = cv2.bitwise_and(img,img,mask = mask)
plt.imshow(res[...,::-1],interpolation='bicubic')

最终效果如下:

下面的代码实现同时提取果实和绿叶的效果:

import cv2
from matplotlib import pyplot as plt

img = cv2.imread('../material/images/IMG_20150107_131650.jpg')
img_hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)

#opencv中,H(色度)范围[0,179],S(饱和度)范围[0,255],V(亮度)范围[0,255]
lower_red = np.array([0,60,0])
upper_red = np.array([7,255,255])

lower_green = np.array([22,50,50])
upper_green = np.array([80,255,255])

mask1 = cv2.inRange(img_hsv,lower_red,upper_red)
mask2 = cv2.inRange(img_hsv,lower_green,upper_green)
mask = cv2.add(mask1,mask2)

res = cv2.bitwise_and(img,img,mask = mask)
plt.xticks([])
plt.yticks([])
plt.imshow(res[...,::-1],interpolation='bicubic')

参考资料:《OpenCV-Python 中文教程》段力辉 译

猜你喜欢

转载自blog.csdn.net/weixin_35732969/article/details/83753332