2012-12-12 41 views
0

我一直在測試使用高斯狀態模型的背景減法。我正在使用opencv 2.1.0。我可以生成場景前景的二進制圖像。現在我想要做的是繪製 countour邊界矩形突出顯示移動的對象。我用cvCountourBoundingRect 來獲得矩形覆蓋計數。我面臨的問題是多個 countour,有時附近的矩形重疊。在這裏,任何人都可以建議我防止 重疊的矩形?在理想的情況下,兩個矩形不應該重疊。它應該是繪製一個更大的rectagle,它涵蓋了所有的兩個矩形。如何在opencv中管理countor bounding矩形

任何暗示都會很棒。

+1

如果你有一個函數,它檢查兩個rects是否相交,一個是生成一個包含兩個或多個給定rect的rect,你只需要在列表中找到重疊的併合並它們,或者我誤解你的問題? –

+0

@Dobi你很好地解決了我的問題。你在這裏解釋的邏輯是理想的邏輯。我正在尋找更智能的方法,以達到我能從您提到的邏輯中實現的相同結果。這個問題是我需要經歷迭代。不過,如果有更好的選擇。不管怎麼說,還是要謝謝你。 – sam18

回答

1

在OpenCV中沒有現成的可能性。但實際上,該算法非常簡單:

  1. 循環遍歷所有矩形並檢查兩個矩形是否相互重疊。此主題將很有用:Determine if two rectangles overlap each other?
  2. 對於每個重疊的矩形對都創建包含它們的矩形。要做到這一點,你應該選擇第一個矩形的一個角和第二個矩形的另一個角,這兩個角將爲你創建矩形。我不認爲這是一項艱鉅的任務 - 只是簡單的數學。
+0

感謝您的鏈接。我會更喜歡e.James從你提到的鏈接中回答。尋找重疊矩形的方法是顯而易見的邏輯。這個實現的基本問題是我需要先存儲所有的邊界矩形,然後迭代N次N次,以解決矩形重疊問題。我想如果有更好的辦法來解決這個問題。我嘗試了更多的邏輯,稱爲雙計數,在其中我拍攝了一張黑色圖像,然後用-1邊框尺寸繪製每個輪廓的邊界以填充白色,並再次在該圖像上找到輪廓。但不準確。 – sam18

+0

當一個矩形重疊多個矩形時,複雜性會增加。還需要關心管理這種情況。我所想的只是保持兩個矩形的集合。說,矢量 inRectColl和矢量 outRectColl。每個來自inRectColl的rect都需要使用您提到的邏輯與outRectColl進行比較。當我們發現矩形與outRectColl中的任何CvRect不重疊時,outRectColl會增長。重疊矩形將需要特別處理,以決定它是否會被磨光或將在outRectColl中進行新的輸入。 – sam18