如何获得轮廓的像素点?

时间:2014-10-10 07:55:17

标签: c++ c opencv canny-operator

如何在轮廓中找到像素点?假设在findContours之后我有一个有5个轮廓的图像,我知道我们可以用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)...我如何获得这些信息? here

2 个答案:

答案 0 :(得分:2)

当您在代码中写自己时,变量contoursvector< vector<Point> >:点向量的向量。意思是,每个轮廓都是一个点矢量。

这意味着,contours[0]会给你一个点向量(对应于第0个轮廓),contours[1]会给你另一个点列表,依此类推。

答案 1 :(得分:1)

轮廓是vector的2D Point。因此,要访问每个点,您可以使用2个for循环(代码显示每个点与轮廓ID的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更好地可视化数据,您实际上可以减少轮廓中的点数。查看文档here