我正在使用以下代码来检测圈子:
gray = cv2.GaussianBlur(gray, (5, 5), 0);
gray = cv2.medianBlur(gray, 5)
kernel = np.ones((2, 2), np.uint8)
gray = cv2.erode(gray, kernel, iterations=1)
gray = cv2.dilate(gray, kernel, iterations=1)
circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1, 200,
param1=100, param2=50, minRadius=0, maxRadius=150)
if circles is not None:
# Convert the (x,y) coordinate and radius of the circles
circles = np.round(circles[0, :]).astype("int")
# Loop over the (x,y) coordinate and radius of the circles
for (x, y, r) in circles:
# Draw the circle in the output
cv2.circle(fancy_frame, (x+x1, y+y1), r, (0, 255, 0), 4)
然而,当我发现时,圆圈正在跳跃。我该如何解决这个问题?是否有任何haar或svm可以检测到它?
这是我得到的输出:
[![输出] [1] [1]
我想在实时视频中检测所有圈子
答案 0 :(得分:1)
您的代码看起来很好,很可能您只需要调整HoughCircles
parameters。
首先降低dp
参数,它会给你更多的检测。我在你的图像上从OpenCV samples文件夹中运行了houghcircles.py,它检测到了大部分其余的圈子:
$ python houghcircles.py your_image.png
圆圈的霍夫检测计算量很大,因此可能难以实时运行。您的图像上的“圆圈”也远非完美,这使得算法不容易。考虑训练神经网络而不是检测这些特征。