Как получить пиксельные точки контуров?

Как я могу найти точки пикселей в контуре? Предположим, у меня есть изображение, которое имеет 5 контуров после выполнения findContoursЯ знаю, что мы можем нарисовать контуры 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),... как я могу получить эту информацию? Вот,

0

Решение

Контур 2D vector из Point, Таким образом, для доступа к каждой точке вы можете использовать 2 for петли (код отображает координаты x-y каждой точки с идентификаторами контура), как показано ниже —

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 чтобы лучше визуализировать данные. Проверьте документацию Вот.

1

Другие решения

Когда вы пишете себя в коде, переменная contours это vector< vector<Point> > : вектор вектора точек. То есть каждый контур — это вектор точек.

Это означает, contours[0] даст вам один вектор точек (соответствующий 0-му контуру), contours[1] даст вам еще один список баллов и так далее.

2