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

0

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

Теги:
opencv
canny-operator

2 ответа

1
Лучший ответ

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

2

Когда вы пишете себя в коде, переменные contours представляют собой vector< vector<Point> >: вектор вектора точек. Значение, каждый контур - вектор точек.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню