Opencv houghcircles иногда возвращает [0. 0. 0.]

Я запускаю HoughCircles() на канале PiCamera с фильтром HSV на Raspberry Pi, чтобы обнаружить розовый шар. Иногда я получаю результат ndarray [[[0. 0. 0.]]], который совпадает с np.zeros(shape=(1, 1, 3)), а не ожидаемым None, когда в поле зрения камеры нет круглой формы. Я просмотрел документы, но не увидел никаких подробностей о том, почему он вернул это. Я также посмотрел на исходный код, но не смог найти оболочку Python для Код C++, что, похоже, мне тоже не помогает.

Вот мой вызов функции:

circles = cv2.HoughCircles(frame, cv2.HOUGH_GRADIENT, 3, frame.shape[0] / 4, param1=220, param2=110, minRadius=5)

Мне интересно, почему, если он делает что-то вроде идентификации чего-то невероятно маленького, что я даже не вижу на imshow() (который всегда полностью черный вокруг (0,0); десятки строк и столбцов только с нулями), тогда почему всегда ли он находится в точке (0,0) с радиусом 0? Я не понимаю, как он вернет круг с радиусом 0, когда я поставил minRadius=5. Я не верю, что это действительно достоверное обнаружение. Иногда для этого требуются сотни казней, но кажется, что я могу вызвать это, быстро перемещая что-то камерой, например, своей рукой.

Есть идеи, почему это происходит, может быть, кто-то другой испытал это?

Недавно я обнаружил, что после обновления некоторых пакетов python, включая opencv, функция HoughCircles начала возвращать (0,0,0) вместо None, когда круги не были обнаружены. Я не нашел для этого никаких причин или документации, и решение заключалось в явной обработке этого возвращаемого значения.

Mick 26.10.2018 09:18

Спасибо, @Mick, странно, что я получаю и то, и другое. Пользуюсь 3.4.3; до какой версии вы обновились?

Darrel Holt 26.10.2018 09:21

В настоящее время у меня установлен opencv-python 3.4.3.18.

Mick 26.10.2018 09:22

«но не могу найти оболочку Python» - реализация всех оболочек создается автоматически во время сборки. Соберите OpenCV с поддержкой Python, а затем найдите pyopencv_*.h.

Dan Mašek 26.10.2018 22:17

Невозможно воспроизвести в Windows - стандартная сборка 3.4.3 по-прежнему возвращает None (просто вызывает его на полностью черном входе).

Dan Mašek 26.10.2018 22:30
1
5
301
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я столкнулся с идентичной проблемой в C++, когда HoughCircles () возвращал список с единственным [0,0,0] в нем для определенных изображений. Было обнаружено, что это вызвано ошибкой в ​​методе RemoveOverlaps () в OpenCV и будет исправлено в будущих выпусках (например, 3.4.7, 4.2.0 и т. д.).

Если вам нужна дополнительная информация, взгляните на отчет об ошибке, который я написал: https://github.com/opencv/opencv/issues/14432

Спасибо, я отмечу это как правильный ответ, так как это, кажется, жизнеспособная первопричина.

Darrel Holt 01.05.2019 02:47

Другие вопросы по теме