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

标签 python opencv image-processing

我有这张图片:

enter image description here

我正在尝试用 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,因为在 cv2.inRange 返回的数组中找不到 1 值。也许hsv_lhsv_h定义的范围不好?我从这里获取的:OpenCV & Python -- Can't detect blue objects

感谢任何帮助。谢谢。

最佳答案

您可以直接使用 np.any()反而。如果任何一个像素的值为 255,它将返回 True

所以而不是

在 cv2.inRange(hsv, hsv_l, hsv_h) 中返回 1,

您只需添加以下内容即可:

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

更新:

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

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

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

相关文章:

python - 隔离视频流中的彩色文本区域

python - 扭曲的 ReconnectingClientFactory 失败且没有错误

python - Pandas 日期时间索引类型错误

opencv - 如何对齐(注册)和合并点云以获得完整的 3d 模型?

opencv - 如何在 OPENCV 中为模式识别定义我们自己的内核?

c++ - 我是否必须释放 New 在 C++ 接口(interface)的 Opencv C 包装器中分配的内存

python - 使用来自 Neupy 的 LMS 算法的溢出错误示例

python - 无法在 ubuntu 13.04 上安装 PIL

c++ - 从现有图像中裁剪出图像

c++ - Qt与图像处理