如何知道是否在opencv上检测到颜色

时间:2019-10-08 14:05:07

标签: python opencv colors detection

我目前正在从事一个包括色彩检测的项目。我在python上使用opencv这样做,我可以检测到想要的颜色,即蓝色,但是我无法设法使软件知道已检测到该颜色。 这是我的代码。

` hsv_frame = cv2.cvtColor(frame,cv2.COLOR_BGR2HSV)     边界= [([94,90,45],[145,255,255])]

# loop over the boundaries
for (lower, upper) in boundaries:
    # create NumPy arrays from the boundaries
    lower = np.array(lower, dtype="uint8")
    upper = np.array(upper, dtype="uint8")

    # find the colors within the specified boundaries and apply
    # the mask
    mask = cv2.inRange(hsv_frame, lower, upper)
    output = cv2.bitwise_and(frame, frame, mask=mask)
    imageOut = np.hstack([frame, output])`

这样可以正确隔离蓝色 output of my code.

我的问题是从那里我不知道如何让我的软件知道蓝色已经被检测到并隔离。

1 个答案:

答案 0 :(得分:1)

这是一种基本方法:

定义要检测的颜色。将该图像的阈值设为该颜色-这将导致蒙版,其中所需的颜色为白色,其余为黑色。求和蒙版,如果有任何白色(表示检测到任何颜色),则总和大于0。

我创建了一个示例,其中还显示了图像以帮助理解该过程,但这不是必需的。 我使用HSV色彩空间进行颜色分离。您可以使用this script查找良好的较低/较高的颜色范围。它还可以帮助您了解HSV的工作原理。

enter image description here

import cv2
import numpy as np
# load image
img = cv2.imread("img.jpg")
# Convert to HSV
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

# define range wanted color in HSV
lower_val = np.array([37,42,0]) 
upper_val = np.array([84,255,255]) 

# Threshold the HSV image - any green color will show up as white
mask = cv2.inRange(hsv, lower_val, upper_val)

# if there are any white pixels on mask, sum will be > 0
hasGreen = np.sum(mask)
if hasGreen > 0:
    print('Green detected!')

# show image 
# apply mask to image
res = cv2.bitwise_and(img,img,mask=mask)
fin = np.hstack((img,res))
# display image
cv2.imshow("Res", fin)
cv2.imshow("Mask", mask)
cv2.waitKey(0)
cv2.destroyAllWindows()