Вычислить площадь объекта с OpenCV

Мне нужно вычислить площадь блоба/объекта в изображении в градациях серого (загружая его как Mat, а не как IplImage) с помощью OpenCV. Я подумал, что было бы неплохо получить координаты краев (количество краев изменяется от объекта к объекту) или получить все координаты контура, а затем использовать contourArea() для вычисления площади моего объекта.

Я удалил весь шум и получил несколько приятных и удовлетворительных контуров с помощью findContours() (программирование на C++).

findContours(InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy,int mode, int method, Point offset=Point());

Теперь я понял, что параметр contours уже владеет координатами всех контуров моего объекта. Я правильно понял?

Если да, есть ли способ получить к ним доступ?

А если нет, то как мне все-таки получить координаты контура?


person Temer    schedule 24.07.2012    source источник


Ответы (1)


contours на самом деле определяется как

vector<vector<Point> > contours;

И теперь я думаю понятно, как получить доступ к его точкам.

Площадь контура рассчитывается с помощью функции с красивым названием contourArea():

for (unsigned int i = 0;  i < contours.size();  i++)
{
     std::cout << "# of contour points: " << contours[i].size() << std::endl;

     for (unsigned int j=0;  j<contours[i].size();  j++)
     {
         std::cout << "Point(x,y)=" << contours[i][j] << std::endl;
     }

     std::cout << " Area: " << contourArea(contours[i]) << std::endl;
}
person Sam    schedule 24.07.2012
comment
Большое спасибо! Потребовалось некоторое время, чтобы понять, что вы делаете, но, насколько я могу сказать, теперь это работает :) Сидел над этой проблемой в течение нескольких дней, не видя никакого решения... - person Temer; 24.07.2012
comment
Чтение документов сэкономило бы вам много времени :). Пример кода, который поставляется с OpenCV, также великолепен. - person Sam; 24.07.2012