如何知道在opencv上是否检测到颜色
how to know if a color is detected on opencv
我目前正在从事一个包括颜色检测在内的项目。我在 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.
我的问题是我不知道如何让我的软件知道蓝色已经被检测到并被隔离。
这是一个基本方法:
定义要检测的颜色。为该颜色设置图像阈值 - 这将导致所需颜色为白色而其余颜色为黑色的蒙版。对掩码求和,如果有任何白色(意味着如果检测到任何颜色)总和将大于 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()
我目前正在从事一个包括颜色检测在内的项目。我在 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.
我的问题是我不知道如何让我的软件知道蓝色已经被检测到并被隔离。
这是一个基本方法:
定义要检测的颜色。为该颜色设置图像阈值 - 这将导致所需颜色为白色而其余颜色为黑色的蒙版。对掩码求和,如果有任何白色(意味着如果检测到任何颜色)总和将大于 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()