2014-07-23 100 views
0

在opencv輪廓檢測中,我得到多個輪廓靠近彼此。在這個圖像中,我必須從每組最近的輪廓中選擇一個輪廓。 我怎樣才能選擇一個組的輪廓。 我知道關於擴張圖像,已經完成,但它不適合我。
看到附加的圖像有四個輪廓。我需要從他們中選擇兩個,每個組中有一個。 怎麼能實現這一點。 select a contours from group of possibles 從候選輪廓列表中選擇一個輪廓

+2

迭代所有輪廓並只選擇在已選輪廓內沒有中心的輪廓時如何? –

回答

0

如果您有源圖片like this &您想查找董事會from the Image。你可以按照這個僞代碼。你可以很容易地用C++實現它。 請注意,在這裏我使用CV_RETR_EXTERNAL參數來檢索最外層的輪廓。

Image<Bgr, byte> Img_Result_Bgr = Img_Source_Bgr.Clone(); 
Image<Gray, byte> Img_Org_Gray = Img_Source_Bgr.Convert<Gray, byte>(); 
Img_Org_Gray = Img_Org_Gray.ThresholdBinary(new Gray(250), new Gray(255)); 

#region Finding Contours 
using (MemStorage storage = new MemStorage()) //allocate storage for contour approximation 
    for (Contour<Point> contours = Img_Org_Gray.FindContours(Emgu.CV.CvEnum.CHAIN_APPROX_METHOD.CV_CHAIN_APPROX_NONE, Emgu.CV.CvEnum.RETR_TYPE.CV_RETR_EXTERNAL, storage); contours != null; contours = contours.HNext) 
    { 
     Contour<Point> contours_Approximated = contours.ApproxPoly(contours.Perimeter * 0.005,storage); 
     if (contours.Area > 10) //only consider contours with area greater than 100 
     { 
      Img_Result_Bgr.Draw(contours_Approximated, new Bgr(Color.Red), 2); 
     } 
    } 
#endregion 
imageBox1.Image = Img_Result_Bgr; 
+0

謝謝,我會在幾分鐘內嘗試......並回復..而我在兩者之間應用@ Random-I-Am的上述方法。 – Vivek