Вычислить центр контура/площади

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

Как рассчитать центр контура или области с помощью OpenCV?

Ссылки Opencv:


person Janusz    schedule 09.06.2009    source источник


Ответы (2)


Вы можете получить центр масс в направлении Y, сначала рассчитав Моменты. Затем центр масс задается yc = M01 / M00, где M01 и M00 — поля в структуре, возвращаемой вызовом Moments.

Если вам нужен только центр ограничивающего прямоугольника, это также легко сделать с помощью BoundingRect. Это возвращает вам CvRect, и вы можете просто взять половину высоты.

Дайте мне знать, если это недостаточно точно, у меня где-то есть пример кода, который я могу вам откопать.

person Kiv    schedule 09.06.2009
comment
В-третьих, вы можете вычислить выпуклую оболочку и ее момент (что на самом деле является первым внутренним шагом в BoundingRect). В-четвертых, вы можете вычислить центр масс только пикселей контура (т.е. пикселей, которые точно лежат на контуре). Все эти методы будут давать разные значения, и их полезность будет зависеть от конкретных потребностей вашего приложения. - person rwong; 04.07.2010
comment
Центр точек контура не является центром тяжести. 99% точек контура могут быть сосредоточены в небольшой области с высокой вариабельностью, и только 3 покрывают остальную часть более крупной правильной формы. - person Martin Beckett; 10.12.2012
comment
Моменты для контура вычисляются не путем суммирования по точкам контура, а с использованием теоремы Грина. Результаты не совсем совпадают с вычислением центра масс для заполненного контура на изображении, но аналогичны и никоим образом не искажаются неравномерностью распределения точек контура, как вы предлагаете. - person buzjwa; 30.11.2014

Я точно не знаю, что такое OpenCV, но я бы предложил следующее:

Выбранный кластер пикселей имеет максимальную ширину в одной точке - w - поэтому допустим, что область имеет w вертикальных столбцов пикселей. Теперь я бы взвесил столбцы в соответствии с тем, сколько пикселей содержит столбец, и использовал бы эти веса столбцов для определения центральной точки по горизонтали.

Тот же алгоритм может работать и для X Center.

person wsd    schedule 09.06.2009
comment
Нет смысла делать это самостоятельно, когда есть несколько встроенных способов сделать это. - person Kiv; 09.06.2009