如何知道在opencv上是不是检测到颜色[重复]

Posted

技术标签:

【中文标题】如何知道在opencv上是不是检测到颜色[重复]【英文标题】:how to know if a color is detected on opencv [duplicate]如何知道在opencv上是否检测到颜色[重复] 【发布时间】:2019-10-08 14:05:07 【问题描述】:

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

` hsv_frame = cv2.cvtColor(帧,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.

我的问题是,我不知道如何让我的软件知道蓝色已被检测和隔离。

【问题讨论】:

添加更多细节,您目前如何检测颜色? 关于您的编辑,如果mask 中包含非零值,那么您肯定检测到了给定颜色范围内的像素。 【参考方案1】:

这是一个基本的方法:

定义您要检测的颜色。该颜色的图像阈值 - 这将导致所需颜色为白色而其余颜色为黑色的蒙版。对掩码求和,如果有任何白色(意味着如果检测到任何颜色),总和将大于 0。

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

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()

【讨论】:

以上是关于如何知道在opencv上是不是检测到颜色[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用openCV准确检测这张图片上的棕色/黑色/灰色/白色

Android OpenCV:颜色检测给出奇怪的结果

在卫星图像上使用 opencv 检测植被

如何在 OpenCV 中实现颜色分割和前景检测?

在OpenCV中检测对象上的颜色 - Python

如何使用 OpenCV Python 检测颜色