Python 检查图像是否包含蓝色像素

Python 检查图像是否包含蓝色像素,python,opencv,Python,Opencv,我有这样的图像: 我试图用Python编写一个函数,如果图像包含蓝色像素,它将返回True,否则返回False。 那张照片只是一个例子。我将有其他人的蓝色可以略有不同。但它们总是黑色背景上的蓝色字母 到目前为止,我有: def包含_蓝(img): #将图像转换为HSV颜色空间 hsv=cv2.CVT颜色(img,cv2.COLOR\U BGR2HSV) #定义蓝色的范围 hsv_l=np.数组([100150,0]) hsv_h=np.数组([140255255]) #在图像中查找蓝色像素 #

我有这样的图像:

我试图用Python编写一个函数,如果图像包含蓝色像素,它将返回
True
,否则返回
False
。 那张照片只是一个例子。我将有其他人的蓝色可以略有不同。但它们总是黑色背景上的蓝色字母

到目前为止,我有:

def包含_蓝(img):
#将图像转换为HSV颜色空间
hsv=cv2.CVT颜色(img,cv2.COLOR\U BGR2HSV)
#定义蓝色的范围
hsv_l=np.数组([100150,0])
hsv_h=np.数组([140255255])
#在图像中查找蓝色像素
#
#cv2.inRange将创建一个掩码(二进制数组),其中1的值
#是蓝色像素,0值是蓝色以外的任何其他颜色
#由hsv_l和hsv_h定义的范围
返回cv2中的1。在范围内(高速、高速、高速)
函数始终返回
False
,因为在
cv2.inRange
返回的数组中找不到
1
值。也许
hsv_l
hsv_h
定义的范围不好?我从这里取的:


感谢您的帮助。谢谢。

问题是您没有阅读:D

这说明:

也就是说,如果src(I)在 指定的一维、二维、三维。。。框,否则为0

然后你检查1

# cv2.inRange will create a mask (binary array) where the 1 values
# are blue pixels and 0 values are any other colour out of the blue
# range defined by hsv_l and hsv_h
return 1 in cv2.inRange(hsv, hsv_l, hsv_h)
因此,解决方案是将其更改为:

return 255 in cv2.inRange(hsv, hsv_l, hsv_h)
我用你的图像进行了测试,结果为真,也用黑白图像(虽然是BGR)进行了测试,结果为假

在我看来,你选择的蓝色范围有点偏紫。。。您可以使用像这样的hsv颜色选择器,并选择您喜欢的范围。请记住OpenCV使用H->Hue/2,S和V类似于百分比(0-100),您只需将它们除以100(0-1),再乘以255即可

你可以用它来代替。如果任何一个像素的值为255,它将返回
True

所以不是

返回cv2中的1。范围(hsv、hsv\U l、hsv\U h)

您只需添加以下内容:

返回np.any(cv2.inRange(hsv、hsv\u l、hsv\u h))

更新:

正如@AKX在评论中提到的,您可以尝试以下内容:


返回cv2.inRange(hsv,hsv_l,hsv_h).any()

您不需要numpy的
np。any
为此,只需常规的ol'Python标准库
any()
就可以了。我是说any global(),但那也可以了!:D