gpt4 book ai didi

python - 使用实时视频源中的 openCV 检测球的颜色

转载 作者:行者123 更新时间:2023-12-02 17:08:57 25 4
gpt4 key购买 nike

我试图从我的网络摄像头中检测球的颜色。我尝试的颜色是红色绿色蓝色和黄色。我写了下面给出的这段代码。但即使没有球,它也会显示随机检测到的蓝球。而且当显示绿色或红色时,检测到的蓝色球会在其间弹出。请提出一些使其更准确的方法以及如何包含黄色。

enter code here
import cv2
import numpy as np

cap = cv2.VideoCapture(0)

lower_green = np.array([45,140,50])
upper_green = np.array([75,255,255])

lower_red = np.array([160,140,50])
upper_red = np.array([180,255,255])

lower_blue = np.array([110,50,50])
upper_blue = np.array([130,255,255])



foundred = False

while(True):
success,frame = cap.read()
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
hsv = cv2.medianBlur(hsv,5)
imgThreshHighred = cv2.inRange(hsv, lower_red, upper_red)
imgThreshHighgreen = cv2.inRange(hsv, lower_green, upper_green)
imgThreshHighblue = cv2.inRange(hsv, lower_blue, upper_blue)
circlesred = cv2.HoughCircles(imgThreshHighred,cv2.HOUGH_GRADIENT,1,20,param1=50,param2=30,minRadius=0,maxRadius=0)
circlesblue = cv2.HoughCircles(imgThreshHighblue,cv2.HOUGH_GRADIENT,1,20,param1=50,param2=30,minRadius=0,maxRadius=0)
circlesgreen = cv2.HoughCircles(imgThreshHighgreen,cv2.HOUGH_GRADIENT,1,20,param1=50,param2=30,minRadius=0,maxRadius=0)
if circlesred is not None:
print "found red"
# print circlesred
if circlesgreen is not None:
print "found green"
# print circlesgreen
if circlesblue is not None:
print "found blue"
# print circlesblue
else:
print "no ball"

if cv2.waitKey(1) & 0xFF == ord('q'):
break
cv2.destroyAllWindows()

最佳答案

您正在观察误报,正如火焰石指出的那样,它们是由图像中落在目标 HSV 范围内的其他区域引起的。这对于您当前的方法是正常的。基于颜色区域检测的检测几乎肯定会在自然图像中产生误报。要减少或消除误报,您有两种策略。

1. 使用更具体的颜色模型。 您可以使用火焰石建议的更严格的 HSV 范围来执行此操作,或者您可以使用 OpenCV 的高斯混合建模方法和 EM 为每个球训练一个高斯模型。类(class)。这可用于分段,并将替换您调用 inRange 的 3 行代码.在这两种方法中,您必须注意您的训练图像与您的测试图像匹配(特别是照明相似,并且自动白平衡的颜色变化,如果激活,则在训练图像中表示)。

2. 使用附加功能/信息。 如果您仍然留下误报,则需要使用颜色以外的属性来消除它们。例如,视频中球的半径是否大致恒定?如果是这样,您可以拒绝明显太小或太大的区域。这可能非常有效。背景没有动吗?如果是这样,您可以尝试使用 OpenCV 的背景减法方法来消除误报。你一次只看到一个球吗?如果是这样,您可以使用例如高斯颜色模型在每个区域的对数似然的平均值来拒绝除最可能的“球”区域之外的所有区域。

关于python - 使用实时视频源中的 openCV 检测球的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48268272/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com