2017-08-30 3 views
0

私は2D点のベクトルを得ました。これらの点によって形成されたすべての等高線を見つける必要があります。残念ながら、cv::findContoursはポイントの配列を扱うことができません。バイナリイメージが必要です。OpenCV findContours of points vector

ポイントの輪郭を得るための回避策はありますか?多分ポイントを使ってバイナリイメージを形成し、次にこのイメージをcv::findContoursで使用することは可能ですか? こちらからご連絡ください。

+1

あなたは凸包を探していますされていますか? http://opencvexamples.blogspot.com/2013/10/convex-hull.htmlを参照してください。 – kebs

+0

あなたのリンクから理解しているように、convexHullはすべての輪郭を返しませんが、そのうちの1つだけです – rudolfninja

答えて

1

あなたは画像の大きさがわかっている場合は、ゼロのバイナリイメージを作成し、その後、品種を使用する:: findContoursバイナリイメージ内のすべての輪郭を見つけるために、値255ですべての2Dのポイントを埋めることができます。コードスニペット後

はあなたを助けることがあります。

// 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

関連する問題