Как найти точки пикселя в контуре? Предположим, у меня есть изображение с 5 контурами после findContours
, я знаю, что мы можем разбить контуры с drawContour
функции drawContour
, но мне нужно знать пиксельные точки, которые образуют контур.
Например:
cv::medianBlur(img1,img1,7);
Canny(src1,img1,250,350,3);
imshow("abc",img1);
vector< vector<Point> > contours;
findContours(img1, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);
for(int i=0;i<contours.size();i++){
cv::drawContours(src2,contours,i,Scalar(255,100,200),2);
}
Я сделал это и получил этот образ сейчас. Теперь я хочу, чтобы пиксельные точки формировали контур, например (x1,Y1)
, (x2,y2)
, ...
как я могу получить эту информацию?
,
Контур является двумерным vector
Point
. Таким образом, для доступа к каждой точке вы можете использовать 2 for
циклов (код отображает xy координаты каждой точки с идентификаторами контура), как показано ниже -
for(int i = 0; i < contours.size; i++)
for(int j = 0; i < contours.size; j++)
cout << "ID = " << i << "( " << contours[i][j].x
<< " , " << contours[i][j].y << " )"<< endl;
Фактически вы можете уменьшить количество точек в контуре, используя approxPolyDP
чтобы лучше визуализировать данные. Проверьте документацию здесь.
Когда вы пишете себя в коде, переменные contours
представляют собой vector< vector<Point> >
: вектор вектора точек. Значение, каждый контур - вектор точек.
Это означает, что contours[0]
предоставят вам один вектор точек (соответствующий 0-му контуру), contours[1]
предоставят вам еще один список точек и т.д.