2012-07-13 33 views
0

我剛剛寫了一個小程序,用於在閾值處理後用canny處理的彩色閾值二值圖像中搜索輪廓,但總是會爲圖像中的每個對象找到兩個輪廓。OpenCV findContours Allways爲每個對象找到兩個輪廓

在繪製找到輪廓的右下角圖像中,您可以看到最大輪廓繪製兩次,兩個輪廓之間有一點偏移。下圖顯示了該圖像的詳細視圖。

http://img831.imageshack.us/img831/3641/doubleframe2.png

這裏只是最大的輪廓繪製兩次,但它隨機發生的輪廓每隔一個。 我只想爲每個物體繪製一個輪廓,我如何實現這個目標? :/

更新:

其由findContours方法填充的輪廓矢量的大小的大小爲8,其中它應該有一個尺寸正好4.

更新2:

下面是從超高動力學 http://img405.imageshack.us/img405/9761/inputimage.jpg 的顏色的閾值的RGB輸入圖像I中使用的以下方針

cv::cvtColor(in, out, CV_BGR2HSV); 
cv::inRange(out, 
      cv::Scalar(25, 131, 97), 
      cv::Scalar(35, 220, 217), 
      out); 

隨後侵蝕+擴張與矩形元素的大小爲1

+0

請提供原始圖像的鏈接。 – 2012-07-13 11:52:29

+0

完成。必須刪除程序的圖像,因爲我只能發佈2個鏈接:/。 – 2012-07-13 12:26:41

+0

爲什麼在找到輪廓之前去找Canny?爲什麼不直接在閾值圖像上找到輪廓? – 2012-07-13 13:51:35

回答

3

我認爲這個問題是最有可能的,因爲當你發現邊緣,然後找到那些邊緣的輪廓,有一個外邊界和內部邊界爲它。所以openCV將這兩個輪廓作爲輪廓繪製出來。

當我計算出它的地區,他們大約有的價值的一個非常微小的變化「3」(例如,最大的廣場已檢測到兩個輪廓與地區9105.5和9108.5),這是最有可能由於我提到的原因而發生。 (所以它們很難區分)

如果您發現輪廓與找到canny邊緣,可以解決問題。即直接從閾值圖像中找到輪廓。它會給你更準確的答案。

在第一種情況下(canny後),我得到了36個輪廓,而在第二種情況下,我只有22個輪廓。

試試吧,希望它能解決問題!

+0

不知道我可以直接在閾值圖像上使用findContours,現在效果更好。謝謝! :) – 2012-07-13 14:51:44

+0

最受歡迎!如果它解決了你的問題,你可以接受答案並關閉本次會議。 – 2012-07-13 16:27:10