2014-10-10 123 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]會給你另一個點的列表,依此類推。