OpenCV крутой круг не обнаруживает круги - PullRequest
0 голосов
/ 11 ноября 2018

Я пытаюсь определить круг внутри светофора, и я могу обнаружить только 1 из 2 кругов, а размер круга, который я получаю, кажется слишком большим

Входное изображение: https://i.imgur.com/VkNDt2B.png

Выходное изображение: https://i.imgur.com/BBq5tE0.png

int main()
{
    Mat src, gray;
    src = imread("C:\/test_image2.png", 1);
    resize(src, src, Size(640, 480));

    cvtColor(src, gray, CV_BGR2GRAY);

    // Reduce the noise so we avoid false circle detection
    GaussianBlur(gray, gray, Size(9, 9), 2, 2);

    vector<Vec3f> circles;

    // Apply the Hough Transform to find the circles
    HoughCircles(gray, circles, CV_HOUGH_GRADIENT, 1, 60, 200, 20, 0, 35);

    // Draw the circles detected
    for (size_t i = 0; i < circles.size(); i++)
    {
        Point center(cvRound(circles[i][0]), cvRound(circles[i][1]));
        int radius = cvRound(circles[i][2]);
        circle(src, center, 3, Scalar(0, 255, 0), -1, 8, 0);// circle center     
        circle(src, center, radius, Scalar(0, 0, 255), 3, 8, 0);// circle outline
        cout << "center : " << center << "\nradius : " << radius << endl;
    }

    // Show your results
    namedWindow("Hough Circle Transform Demo", CV_WINDOW_AUTOSIZE);
    imshow("Hough Circle Transform Demo", src);

    waitKey(0);
    return 0;
}

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

это довольно огромное изображение попробуйте сначала обрезать часть светофора (чтобы начать с чего-то), а затем, попробовав различные комбинации min_distance и param_1, параметр param_2 попытайтесь определить большинство кругов (даже неправильных). выясните, какие значения получают наибольшее количество кругов, а какая комбинация получает наименьшие (или нет) окружности, а затем выполните точную настройку параметров, чтобы выявить меньшие круги, и, наконец, найдите идеальную комбинацию

0 голосов
/ 11 ноября 2018

HoughCircles лучше всего работает, если вы заранее знаете приблизительный размер нужных вам кругов. Я предлагаю вам дать лучшее значение для параметров min_radius и max_radius. В любом случае вам нужно поиграть с параметрами param1 и param2. Если круги не являются идеальными кругами, вы можете попытаться уменьшить разрешение изображения с помощью параметра dp (например, при dp = 2 изображение уменьшается до половины его разрешения). В основном: играйте с param1 и param2, пока ваши круги не будут обнаружены, независимо от того, обнаружены ли другие круги Используйте этот результат, чтобы узнать, каков радиус ваших кругов, затем установите минимальный и максимальный радиус, чтобы удалить большинство нежелательных кругов, и, наконец, снова играйте с param1 и param2, пока не останутся только ваши круги.

...