2017-08-30 66 views
0

我有一個2D點矢量,我需要找到這些點形成的所有輪廓。不幸的是,cv::findContours無法處理一組點,它需要一個二進制圖像。OpenCV findContours點矢量

所以問題是否有任何解決方法來獲得點的輪廓?也許有可能使用點形成二進制圖像,然後在cv::findContours函數中使用此圖像? 請指教。

+1

你正在尋找的凸包?看到http://opencvexamples.blogspot.com/2013/10/convex-hull.html – kebs

+0

正如我從你的鏈接瞭解到的,convexHull不會返回所有的輪廓,但只有其中一個 – rudolfninja

回答

1

如果你知道圖像的大小,你可以創建一個零值的二進制圖像,並填充所有的二維點值爲255.然後使用cv :: findContours找到二進制圖像中的所有輪廓。

下面的代碼片段可以幫助你:

// If pts is your array of float points and r,c are number of rows and columns of image 
//calculate total number of points in array 
int n = sizeof(pts)/sizeof(*pts); 
//if points are stored in vector, then use n = pts.size() 
//create binary image 
cv::Mat image = cv::Mat::zeros(Size(c, r), CV_8UC1); 
//fill all the points with value 255 
for (int i = 0; i < n; i++) { 
    image.at<uchar>(p[i]) = 255; 
} 
//find all contours in binary image and save in contours variale 
vector<vector<Point>> contours; 
vector<Vec4i> hierarchy; 
findContours(image, contours, hierarchy, RETR_LIST, CHAIN_APPROX_NONE); 
+0

我知道圖像大小。你能否詳細描述你的解決方法?我有浮動座標,所以不知道如何填充所有的2D浮點數 – rudolfninja

+0

我編輯了我的答案並添加了代碼片段。它可能會幫助你。 – Jazz

+0

反轉x和y ...或直接使用p [i]來訪問圖像 – Miki