- opencv的HSV格式中,H(色彩)的取值范围是[0, 179],S(饱和度)的取值范围是[0,255],V(亮度)的取值范围是[0, 255],不同软件使用的值可能会不一样。
- cv2.cvtColor()函数cv2.inRange()函数的功能很简单,
- cv2.cvtColor()用来实现类型转换,比如BGR==>HSV或者BGR==>GRAY等等,下面的物体跟踪就是基于HSV值来做的。
cv2.inRange()在这里主要是用来根据设定阈值范围生成掩模,根据掩模再与原图像进行按位与运算。为了查找方便,附上各个颜色与其对应的HSV值:
image.png
现在准备同时提取图片中蓝色、绿色、黄色物体,同理视频也可以操作,本文主要针对图片,操作对象如下图:
image.png
以下同时提取蓝色、绿色和黄色模块,代码如下:
import cv2
import numpy as np
#将读取图片转换HSV格式
img = cv2.imread('444.jpg')
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
#蓝色阈值设定
lower_blue = np.array([100, 43, 46])
upper_blue = np.array([124, 255, 255])
#绿色阈值设定
lower_green = np.array([35, 43, 46])
upper_green = np.array([77, 255, 255])
#黄色
lower_yellow = np.array([11, 43, 46])
upper_yellow = np.array([34, 255, 255])
#通过cv2.inRange()生成掩模
img_blue_mask = cv2.inRange(hsv, lower_blue, upper_blue)
img_green_mask = cv2.inRange(hsv, lower_green, upper_green)
img_yellow_mask = cv2.inRange(hsv, lower_yellow, upper_yellow)
#掩模求和最后和原图像进行按位与计算
det1 = cv2.add(img_blue_mask, img_green_mask)
det = cv2.add(det1, img_yellow_mask)
res = cv2.bitwise_and(img, img, mask=det)
cv2.imshow('image', res)
cv2.waitKey(0)
cv2.destroyAllWindows()
image.png
网友评论