使用Python和OpenCV在图像中找到红色颜色

9 浏览
0 Comments

使用Python和OpenCV在图像中找到红色颜色

我正在尝试从图像中提取红色。我有一段代码,应用阈值只保留指定范围内的值:

img = cv2.imread('img.bmp')

img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

lower_red = np.array([0,50,50]) #示例值

upper_red = np.array([10,255,255]) #示例值

mask = cv2.inRange(img_hsv, lower_red, upper_red)

img_result = cv2.bitwise_and(img, img, mask=mask)

但是,根据我的检查,红色可以在Hue值的范围内,比如从0到10,也可以在从170到180的范围内。因此,我希望保留这两个范围中的值。我尝试将阈值设置为从10到170,并使用cv2.bitwise_not()函数,但是这样会连同所有白色一起被提取出来。我认为最好的选择是为每个范围创建一个掩码,然后在继续之前将它们合并在一起。

有没有办法可以使用OpenCV合并两个掩码?或者有其他方法可以实现我的目标吗?

编辑。我想到了一个不太优雅但有效的解决方案:

image_result = np.zeros((image_height,image_width,3),np.uint8)

for i in range(image_height): #这些值在其他地方设置

for j in range(image_width): #这些值在其他地方设置

if img_hsv[i][j][1]>=50 \

and img_hsv[i][j][2]>=50 \

and (img_hsv[i][j][0] <= 10 or img_hsv[i][j][0]>=170):

image_result[i][j]=img_hsv[i][j]

它基本上满足了我的需求,而且OpenCV的函数可能也做了相同的事情,但如果有更好的方法(使用某些专用函数并编写更少的代码),请和我分享。 🙂

0