我有一個2D點矢量,我需要找到這些點形成的所有輪廓。不幸的是,cv::findContours
無法處理一組點,它需要一個二進制圖像。OpenCV findContours點矢量
所以問題是否有任何解決方法來獲得點的輪廓?也許有可能使用點形成二進制圖像,然後在cv::findContours
函數中使用此圖像? 請指教。
我有一個2D點矢量,我需要找到這些點形成的所有輪廓。不幸的是,cv::findContours
無法處理一組點,它需要一個二進制圖像。OpenCV findContours點矢量
所以問題是否有任何解決方法來獲得點的輪廓?也許有可能使用點形成二進制圖像,然後在cv::findContours
函數中使用此圖像? 請指教。
如果你知道圖像的大小,你可以創建一個零值的二進制圖像,並填充所有的二維點值爲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);
我知道圖像大小。你能否詳細描述你的解決方法?我有浮動座標,所以不知道如何填充所有的2D浮點數 – rudolfninja
我編輯了我的答案並添加了代碼片段。它可能會幫助你。 – Jazz
反轉x和y ...或直接使用p [i]來訪問圖像 – Miki
你正在尋找的凸包?看到http://opencvexamples.blogspot.com/2013/10/convex-hull.html – kebs
正如我從你的鏈接瞭解到的,convexHull不會返回所有的輪廓,但只有其中一個 – rudolfninja