2015-05-27 2 views
0

Я использую OpenCV 2.4.8 в python для сегментирования изображений и поиска объектов. Я хочу использовать findContours для перечисления объектов и анализа их области, формы и т. Д. Но если у меня есть два объекта, которые разделены только тонкой (1 px шириной) диагональной линией или даже диагонально касаются по углам, они будут распознаны как один объект.Python openCV findContours ложно связывает соседние объекты

Это изображение иллюстрирует проблему:

enter image description here

Есть, очевидно, два объекта, но они признаны как единое целое.

В Matlab для решения этой проблемы можно указать параметр подключения (окрестности 4 или 8). Можно ли это сделать и с помощью opencv? Может быть, используя иерархию контуров или какую-то другую работу?

Я знаю, что я мог бы использовать морфологическую эрозию или открытие для разделения двух объектов, но это может вызвать проблемы в других частях моего изображения. Я уже пробовал это.

+0

В настоящее время OpenCV 3.0 имеет методы 'connectedComponents' и' connectedComponentsWithStats', которые позволяют выбирать между 4- и 8-соседними подключениями. Если изменение версий является опцией, см. Мой ответ [здесь] (http://stackoverflow.com/questions/9018016/how-to-compare-two-colors) – beaker

ответ

0

Если ваши объекты круглые, вы можете попробовать использовать круговое преобразование Хафа.

Если такое изображение представлено как один контур, то оно обязательно имеет дефекты. Вы можете искать дефекты выпуклости и исходить оттуда. Но это снова зависит от объектов вашего изображения.

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

Смежные вопросы