2012-11-06 192 views
4

我有幾個輪廓由我的圖像中的幾個黑色區域組成。與這些黑色區域直接相鄰的是一些不屬於我的輪廓的較亮區域。我想將這些更亮的區域添加到我的黑色區域,並因此在OpenCv中擴展我的輪廓。
有沒有方便的方法來擴展輪廓?我考慮過從用cv::Sobel創建的漸變圖像中查看亮度變化,並延伸至漸變再次變化,這意味着像素的強度將返回到圖像的黑色區域和明亮區域。在OpenCv中擴展輪廓

謝謝!

下面是示例圖像。第一張圖片顯示的是原始圖像,第二張提取的輪廓使用Canny & findContours,最後一張Sobel-Gradient強度圖像的同一區域。 我想要在Contour的第一個圖像中包含明亮的邊界。

enter image description here enter image description here enter image description here

更新:我現在已經使用了一些形態學操作上Sobelgradients並添加周圍的輪廓(見下圖)。下一步可能是找到相鄰的一對紅色輪廓,但看起來非常像浪費遊戲時間,實際上不得不搜索直接相鄰的輪廓。任何更好的想法?

enter image description here

更新2:我現在的解決辦法是尋找仿型梯度(紅色)輪廓圍繞我(紫色)的輪廓邊界框,並挑選一個正確方向&大小。這適用於梯形輪廓,其中形態操作關閉如圖3所示的「上升」和「下降」梯度區域。但對於上圖中點亮區域更寬的情況,這仍然是一個不好的解決方案。任何想法仍然非常感謝,謝謝!

+0

請提供樣本圖片! –

+0

好的,在我的問題中添加了一些圖片和說明。 – moatilliatta

回答

3

你想要做的是找到兩個不同的功能併合並它們。這不是非常困難,但你必須使用圖像的多個副本才能實現。

  1. 製作一個拷貝,和閾值,它爲暗部
  2. 使對於光部
  3. 另一個副本和閾值,它合併兩個閾值化圖像轉換成一個新的圖像
  4. 應用一個形態運算狀開口或關閉(取決於您的閾值)這將連接附近的組件
  5. 在結果圖像中查找輪廓
  6. 在原始圖像上使用這些輪廓。這將起作用,因爲所有圖像都是相同的大小,並且都基於原始圖像。
+0

感謝您的回答。是的,原帖中提到的方法並不是非常有用,因爲它無法處理大型光照區域。你的方法大致是我最後提出的,它工作得很好。但我的方法是找到黑暗的部分,然後圍繞它投入感興趣區域,並在光照部分圖像中搜索最合適的合作伙伴,然後合併它們。如果我在黑暗部分附近有幾個淺色部分,你的方法可能會失敗。 – moatilliatta

+0

不過,我會接受你的答案,因爲兩次限制圖像的方法導致我的最終解決方案... – moatilliatta

+0

啊,我明白你的意思了。我沒有意識到,你可能有多個輕的部分候選人,你需要選擇最好的部分。很高興我可以提供幫助。 –