OpenCV: предотвращение использования метода Canny Detection методом HoughCircles

Я использую HoughCircles для обнаружения шара в режиме реального времени, но запуск Canny в моем потоке изображения в оттенках серого не создает все края, как это должно быть. Чтобы исправить это, я разделяю изображение rgb на отдельные каналы, выполняя Canny для каждого из них, затем используя побитовые или объединяя края. Это работает довольно хорошо, но если я передам это краевое изображение в HoughCircles, оно снова выполнит Canny на краевом изображении. Есть ли способ предотвратить это или отказаться от обнаружения Canny RGB Split, которое я выполняю, все еще ловя все края?

7

Решение

В самом деле! Canny выполняется внутренне HoughCircles и нет возможности позвонить cv::HoughCircles() и не дать ему вызвать Кэнни.

тем не мение, если вы хотите придерживаться своего текущего подхода, один из вариантов — скопировать реализацию cv::HoughCircles() доступно в исходном коде OpenCV и измените его в соответствии с вашими потребностями. Это позволит вам написать свою собственную версию cv::HoughCircles(),

Если вы идете по этому пути, важно понимать, что C ++ API OpenCV построен на C API. Это означает, что cv::HoughCircles() это просто обертка вокруг cvHoughCircles(), который реализуется на opencv-2.4.7/modules/imgproc/src/hough.cpp после строки 1006.

Посмотрите на эту функцию (строка 1006) и обратите внимание на вызов icvHoughCirclesGradient() в строке 1064. Эта функция отвечает за вызов cvCanny()Это делается в строке 817.

Другой подход, если мяч одноцветная, может быть реализовано с помощью cv::inRange() в выделить определенный цвет, и это обеспечит намного более быстрое обнаружение. Также эта тема широко обсуждалась на этом форуме. Одна очень интересная тема:

10

Другие решения

Для тех, кто ищет использование пользовательского обнаружения края с обнаружением круга в Python, вы можете использовать функцию обнаружения края Canny в OpenCV и передать ее функции scikit-image (skimage) hough_circle (http://scikit-image.org/docs/dev/api/skimage.transform.html#skimage.transform.hough_circle).

Функция Skimage hough_circle не выполняет внутреннее обнаружение краев Canny, что дает вам возможность реализовать свои собственные. Ниже приведен пример:

hough_results = hough_circle (cv2.Canny (IMAGE, LOWER_THRESHOLD, UPPER_THRESHOLD), np.arrange (MIN_RADIUS, MAX_RADIUS, 1))

0

По вопросам рекламы [email protected]