2014-10-10 74 views
0

如何找到轮廓中的像素点?假设在做了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

回答

1

轮廓是一个2D vectorPoint。因此,访问每一个点,你可以使用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更好地显示数据的轮廓。检查文档here

2

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

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