Python 如果遮罩中存在颜色,则从cv2.inRange()返回布尔值

Python 如果遮罩中存在颜色,则从cv2.inRange()返回布尔值,python,numpy,opencv,computer-vision,Python,Numpy,Opencv,Computer Vision,我正在使用cv2.inRange()制作一个掩码,它接受图像、下限和上限。遮罩正在工作,但是如果存在范围之间的颜色,我想返回True/False或print('color present')之类的值。以下是一些示例代码: from cv2 import cv2 import numpy as np img = cv2.imread('test_img.jpg', cv2.COLOR_RGB2HSV) lower_range = np.array

我正在使用cv2.inRange()制作一个掩码,它接受图像、下限和上限。遮罩正在工作,但是如果存在范围之间的颜色,我想返回True/False或print('color present')之类的值。以下是一些示例代码:

    from cv2 import cv2
    import numpy as np
    
    img = cv2.imread('test_img.jpg', cv2.COLOR_RGB2HSV)
    
    lower_range = np.array([0, 0, 0])
    upper_range = np.array([100, 100, 100])
    
    mask = cv2.inRange(img_hsv, lower_range, upper_range)
    
   #this is where I need an IF THEN statement. IF the image contains the hsv color between the hsv color range THEN print('color present')

由于拾取了颜色,因此可以在遮罩结果中计算非零像素。或者使用此像素的相对面积

下面是完整的代码和示例

源图像来自。对于这个例子,我得到了500px的PNG图像。因此,OpenCV将透明度显示为黑色像素

然后是HSV完整直方图:

和代码:

import cv2
import numpy as np

fra = cv2.imread('images/rgb.png')
height, width, channels = fra.shape

hsv = cv2.cvtColor(fra, cv2.COLOR_BGR2HSV_FULL)

mask = cv2.inRange(hsv, np.array([50, 0, 0]), np.array([115, 255, 255]))

ones = cv2.countNonZero(mask)

percent_color = (ones/(height*width)) * 100

print("Non Zeros Pixels:{:d} and Area Percentage:{:.2f}".format(ones,percent_color))
cv2.imshow("mask", mask)

cv2.waitKey(0)
cv2.destroyAllWindows()
# Blue Color  [130, 0, 0] - [200, 255, 255]
# Non Zeros Pixels:39357 and Area Percentage:15.43
# Green Color  [50, 0, 0] - [115, 255, 255]
# Non Zeros Pixels:38962 and Area Percentage:15.28
蓝色和绿色分开。

请注意,结果显示两个分割的百分比几乎相同且非零像素,这表明测量颜色的良好方法

 # Blue Color  [130, 0, 0] - [200, 255, 255]
 # Non Zeros Pixels:39357 and Area Percentage:15.43
 # Green Color  [50, 0, 0] - [115, 255, 255]
 # Non Zeros Pixels:38962 and Area Percentage:15.28

祝你好运

您是否需要类似于
if 255 in mask:print('Color present')的内容?其他:print('No')
谢谢!我很难定义准确的HSV颜色范围。是否有可能实现RGB格式而不是HSV以获得更高的精度?我喜欢轨迹栏方法来搜索良好的范围值。这是密码