我有这张图片:

python - 检查图像是否包含蓝色像素-LMLPHP

我正在尝试用Python编写一个函数,如果图像包含蓝色像素,则返回True,否则返回False
该图像只是一个例子。我会有其他人使用的蓝色可能会略有不同。但是它们始终是黑色背景上的蓝色字母。

到目前为止,我有这个:

def contains_blue(img):
    # Convert the image to HSV colour space
    hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
    # Define a range for blue color
    hsv_l = np.array([100, 150, 0])
    hsv_h = np.array([140, 255, 255])
    # Find blue pixels in the image
    #
    # 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)

该函数始终返回False,因为在1返回的数组中未找到cv2.inRange值。也许hsv_lhsv_h定义的范围不好?我从这里拿走的:OpenCV & Python -- Can't detect blue objects

任何帮助表示赞赏。谢谢。

最佳答案

问题是您没有阅读documentation of inRange:D

这说明了以下几点:



然后检查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)

我用您的图像对其进行了测试,并返回true,也使用黑白图像(虽然为BGR)返回了false。

在我看来,您选择的蓝色范围离紫罗兰色的边有点远...您可以使用像这样的hsv colorpicker http://colorizer.org/并选择所需的范围。只是记住OpenCV使用H-> Hue / 2,而S和V就像百分比(0-100),只需将它们除以100(0-1。),再乘以255。

关于python - 检查图像是否包含蓝色像素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51324202/

10-11 18:02