如何从cv2.inRange()的掩码判断目标颜色是否存在并返回布尔值
检测HSV颜色范围内的颜色是否存在
嘿,我来帮你搞定这个问题!其实逻辑很简单:cv2.inRange()生成的掩码是一张二值图——符合目标颜色范围的像素会被标记为白色(值为255),不符合的是黑色(值为0)。我们只要检查这张掩码里有没有非零像素,就能判断目标颜色是否存在啦。
另外先提个小细节:你代码里的图像读取部分有个小问题——cv2.imread()的第二个参数应该是读取模式(比如cv2.IMREAD_COLOR),而不是颜色转换标志。而且OpenCV默认读取的图像是BGR格式,要转HSV得用cv2.COLOR_BGR2HSV,不是COLOR_RGB2HSV哦。
下面是修正后的完整代码,包含颜色存在的判断逻辑:
import cv2 import numpy as np # 读取图像(默认BGR格式) img = cv2.imread('test_img.jpg') # 转换为HSV颜色空间 img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # 定义HSV颜色范围 lower_range = np.array([0, 0, 0]) upper_range = np.array([100, 100, 100]) # 生成掩码 mask = cv2.inRange(img_hsv, lower_range, upper_range) # 判断颜色是否存在 if np.any(mask): print('color present') else: print('color not present')
补充说明:
np.any(mask)会快速检查掩码中是否存在非零值(也就是符合范围的像素),写法非常简洁。- 你也可以用
cv2.countNonZero(mask) > 0实现同样效果,它会统计掩码中非零像素的数量,只要数量大于0就说明颜色存在。
内容的提问来源于stack exchange,提问作者O R
相关产品推荐
相关产品推荐

