与inRange一起使用时读取上下阈值数组

时间:2019-02-01 20:55:25

标签: python opencv image-processing computer-vision

我正在阅读如何使用OpenCV过滤颜色,并遇到了以下代码段。

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

lower_red = np.array([0,160,50])
upper_red = np.array([255,255,180])


mask = cv2.inRange(hsv, lower_red, upper_red)
res = cv2.bitwise_and(img,img, mask= mask)

lower_red中的每个值是什么意思?是否依次表示H,S,V的下限和上限?应该将其作为H的最小值读为0,将H的最大值读为255吗?

我要过滤红色。

1 个答案:

答案 0 :(得分:0)

您一切顺利。我添加了一些代码来显示您的问题的解决方案-将两个HSV颜色范围合并在一个蒙版中。

结果:

enter image description here

代码:

import numpy as np 
import cv2
# load image
img = cv2.imread("HSV.JPG")
# convert to hsv
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

# Create first mask
lower_red = np.array([0,150,50])
upper_red = np.array([5,255,255])
# Threshold the HSV image to get only green colors
mask = cv2.inRange(hsv, lower_red, upper_red)
# apply mask to original image
res = cv2.bitwise_and(img,img, mask= mask)
#show image
cv2.imshow("Mask1", res)

# Create second mask
lower_red2 = np.array([175,150,50])
upper_red2 = np.array([179,255,255])
# Threshold the HSV image to get only green colors
mask2 = cv2.inRange(hsv, lower_red2, upper_red2)
# apply mask to original image
res2 = cv2.bitwise_and(img,img, mask= mask2)
#show image
cv2.imshow("Mask2", res2)

#combine masks
final_mask = cv2.bitwise_or(mask, mask2)
# apply mask to original image
result = cv2.bitwise_and(img,img, mask= final_mask)
#show image
cv2.imshow("Result", result)
cv2.imshow("Image", img)

cv2.waitKey(0)
cv2.destroyAllWindows()

注意:在结果图像中,如果将单独的蒙版应用于原始图像,则显示结果。当然,你真的只需要口罩,这是黑色和白色。