移动检测

时间:2017-09-16 23:56:18

标签: python opencv hough-transform

我正在使用以下代码来检测圈子:

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]

我想在实时视频中检测所有圈子

1 个答案:

答案 0 :(得分:1)

您的代码看起来很好,很可能您只需要调整HoughCircles parameters

首先降低dp参数,它会给你更多的检测。我在你的图像上从OpenCV samples文件夹中运行了houghcircles.py,它检测到了大部分其余的圈子:

$ python houghcircles.py your_image.png

result

圆圈的霍夫检测计算量很大,因此可能难以实时运行。您的图像上的“圆圈”也远非完美,这使得算法不容易。考虑训练神经网络而不是检测这些特征。