如何使用 OpenCV 和 Python 从 .png 图片中获取特定颜色

问题描述 投票:0回答:1

我想检查 PNG 图像是否包含特定颜色。

我使用这个教程

这是图片:

我想检查浅绿色是否存在。在 RGB 中是:

[165, 209, 103]

这是我的脚本:

import cv2
import numpy as np

image = cv2.imread("01.png")
hsvimg = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
lb = np.array([68, 100, 100])
ub = np.array([88, 255, 255])
mask = cv2.inRange(hsvimg, lb, ub)
if 255 in mask:
    print("true")  

我从教程中的脚本中获取了范围。它表示 HSV 颜色是 [78, 129, 209]。 这是正确的吗?

但是脚本没有返回 true。

python opencv image-processing
1个回答
1
投票

感谢您的帮助。这就是绿色的工作原理:)

import cv2
import numpy as np

image = cv2.imread("01.png")
lb = np.array([98, 202, 160])
ub = np.array([118, 215, 170])
mask = cv2.inRange(image, lb, ub)
if 255 in mask:
    print("true")  

但是如果我使用另一张图像并检查其他颜色,则它不起作用。只适合绿色... 这是扩展图:

这是我的代码,用于检查所有颜色。它仅适用于绿色,如果我将其从数组中删除,则不会检测到其他颜色:

import cv2
import numpy as np

image = cv2.imread("01.png")
target_colors = [([98, 202, 160], [118, 215, 170]), ([40, 195, 235], [50, 210, 255]), ([35, 85, 215], [50, 105, 235]), ([15, 0, 200], [35, 8, 215])]
for color_range in target_colors:
    lb = np.array(color_range[0])
    ub = np.array(color_range[1])
    mask = cv2.inRange(image, lb, ub)
    if 255 in mask:
        print("true")
© www.soinside.com 2019 - 2024. All rights reserved.