如何知道在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上是不是检测到颜色[重复]的主要内容,如果未能解决你的问题,请参考以下文章