2012-08-07 93 views
0

我的圖片中有一個對象的輪廓出現問題。OpenCV:如何獲得黑白對象的輪廓?

爲了刪除所有的噪音,我使用adjustROI()Canny()

我也試過erode()dillate()Laplacian()GaussianBlur()Sobel() ...我甚至發現此代碼段銳化圖片:

GaussianBlur(src, dst_gaussian, Size(0, 0), 3); 

addWeighted(src, 1.5, dst_gaussian, -0.5, 0, dst); 

但我的結果總是相同的:我的目標是填充與黑白的顏色(如電視屏幕上的噪音),以便不可能獲得輪廓與findContours()findContours()找到一百萬輪廓,但不是整個對象的一個​​,我檢查這與drawContours())。

我使用C++和我加載我的圖片作爲灰度墊(對於Canny它必須是灰度)。我的物體在每張照片上都有不同的形狀,但總是在照片的中間。

我或者需要找到一種方法來通過圖像處理獲得更好的有色物體 - 但我不知道還有什麼要嘗試的 - 或者是如何在圖像處理之後用顏色填充物體(沒有輪廓,因爲這是我最終想要的)。

歡迎任何想法。先謝謝你。

+0

如果您不提供示例,將很難回答。我從你以前的文章中瞭解到,由於你沒有「擁有」它們,因此你不能放置這些照片。請,你能生成類似的圖像嗎? – 2012-08-07 16:21:33

回答

0

我發現了一個適用於大多數情況的解決方案。我使用概率霍夫變換填充我的對象HoughLinesP()

vector<Vec4i> lines; 
HoughLinesP(dst, lines, 1, CV_PI/180, 80, 30, 10); 
for(size_t i = 0; i < lines.size(); i++) 
{ 
    line(color_dst, Point(lines[i][0], lines[i][1]), Point(lines[i][2], lines[i][3]), Scalar(0,0,255), 3, 8); 
} 

這是來自OpenCV文檔提供的一些示例代碼。

在使用了一些邊緣檢測算法(如Canny())之後,概率霍夫變換在二進制圖片中查找對象。該算法找出線條,如果繪製,則表示整個對象。當然,某些參數必須適合某種圖片。

我不確定這是否適用於每張圖片或每個對象,但在我的情況下,它的確如此。