2011-10-16 140 views
5

用android手機拍照後,我想通過點擊圖片來識別圖片中的物體。在大多數情況下,可能的對象:
1尺
2人
3.鉛筆
我採用了android預建的,OpenCV的2.3.1版,我試圖點擊進入標尺對象和floodfill它來標記它,但如果輪廓未關閉,則整個圖像將被填充。
a)我也嘗試點擊進入標尺對象,然後往南,北,東,西看看邊緣在哪裏並收集這些座標,但是我遇到了很多問題(不要問)。物體檢測android opencv

問題:
1.是否有可能以某種方式關閉輪廓以填充想要的對象?
2.我實際想要找到的是底部的座標和(例如)標尺的高度。
任何其他解決方案,讚賞。你會如何意識到這一點?

更新:我解決了與a)的問題,並在此刻使用此方法(不開心)。我也嘗試了Entreco的方法,但現在似乎沒有給出通緝的解決方案。

回答

6

我不知道你是否試過這個,但通常情況下,你可以通過首先處理圖像來獲得更好的結果。

1)應用GuassianBlur去除噪聲

2)應用AdaptiveThreshold - >將圖像轉換成黑白

3)應用Dilate操作,以填充裂縫

通過使用AdaptiveThreshold和Dilate操作的不同設置,您可能可以獲得封閉的輪廓...

我使用的示例如下所示:

// 1) Apply gaussian blur to remove noise 
Imgproc.GaussianBlur(mGraySubmat, mIntermediateMat, new Size(11,11), 0); 

// 2) AdaptiveThreshold -> classify as either black or white 
Imgproc.adaptiveThreshold(mIntermediateMat, mIntermediateMat, 255, Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY, 5, 2); 

// 3) Invert the image -> so most of the image is black 
Core.bitwise_not(mIntermediateMat, mIntermediateMat); 

// 4) Dilate -> fill the image using the MORPH_DILATE 
Mat kernel = Imgproc.getStructuringElement(Imgproc.MORPH_DILATE, new Size(3,3), new Point(1,1)); 
Imgproc.dilate(mIntermediateMat, mIntermediateMat, kernel); 
+0

非常感謝@Entreco的答案。我會嘗試這個並報告。 – gartenabfall

+0

@Entreco我們可以在封閉的輪廓上繪製一個矩形 –

+0

如果黑色矩形對象沒有檢測到邊緣。 –