Как я могу найти точки пикселей в контуре? Предположим, у меня есть изображение, которое имеет 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)
,...
как я могу получить эту информацию? ,
Контур 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
чтобы лучше визуализировать данные. Проверьте документацию Вот.
Когда вы пишете себя в коде, переменная contours
это vector< vector<Point> >
: вектор вектора точек. То есть каждый контур — это вектор точек.
Это означает, contours[0]
даст вам один вектор точек (соответствующий 0-му контуру), contours[1]
даст вам еще один список баллов и так далее.