2011-11-15 138 views
11

如果此問題已在本網站上發佈,我很抱歉,但似乎無法找到簡單明瞭的答案。我正在製作一個使用OpenCV拍攝照片的Android應用程序,處理它以檢測對象,並找出場景中這些對象的座標。在Android中使用OpenCV加載圖像

我發現的所有教程似乎都是實時處理相機預覽或使用C++,我寧願不必沿着C++路線走。我確定我錯過了一些簡單的東西,但我不知道它是什麼。

另一方面,我試圖檢測的對象是桌上的檯球。什麼是最好的預處理技術來更好地檢測球?我使用canny方法做了一個快速測試,看起來球的反射光破壞了圓形。

+1

試着看HoughCircles – Adrian

回答

16

載入圖像在Android中,你可以使用

Bitmap bMap=BitmapFactory.decodeResource(getResources(),R.drawable.image1) 

image1的地方是在你的Android項目的資源文件夾中的圖像。 然後將位圖轉換爲字節或Mat,並用android-opencv中的matToBitmap或MatToBitmap方法在C++(OpenCV)或Java中進行處理。

如果您在使用墊的數據類型,可以使用在處理舒適(你需要android-opencv項目使用此)

Mat m = Highgui.imread("/media/path_to_image"); 

您可以使用斑點,霍夫圓檢測檯球。沒有什麼方法可以回答這個問題。您可以嘗試使用標準化的RGB或Lab顏色空間來玩耍(去除檯球的反射),以查看您是否檢測到檯球(通過運行ough circle,blob檢測器)。

實時場景將要求您使用機器學習技術通過使用某些特徵向量來檢測檯球,然後進行訓練和測試。

+0

謝謝你,我能弄清楚,但我也發現了javacv哪些保持更加真實的本地opencv代碼,從而更容易跟隨其他教程。 – vince88

+0

@ vince88你在哪裏找到javacv教程?你還可以告訴我如何在Windows上設置它嗎?謝謝。 –

+0

在聲明Mat數據類型之後,還需要做些什麼才能顯示它? –

2

我知道這太晚了,但有人可能會使用它。

Highgui已從android的opencv中刪除。

您可以改爲使用Imgcodes。

Mat BGRMat = Imgcodecs.imread(getResources().getDrawable(R.drawable.img).toString()); 
+0

不算太晚,幫幫我! getDrawable已棄用,因此您可以使用:Mat BGRMat = Imgcodecs.imread(ResourcesCompat.getDrawable(getResources(),R.drawable.img,null).toString()); – syonip

+1

實際上我無法完成這項工作,因爲可繪製資源沒有imread可以使用的路徑。 toString()只是返回資源的名稱... – syonip

+0

@syonip我看到你的代碼上面,並且有一些錯誤:)請確保正確地複製代碼。例如,在getResources()方法之後,您應該放置。(點)而不是(逗號)。祝你好運... –

5

這對我的作品(得到了這裏的答案:How to get Mat with a drawable input in Android using OpenCV

Mat img = null; 
try { 
    img = Utils.loadResource(this, R.drawable.image_id, CvType.CV_8UC4); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
+0

你好,我用這個代碼來加載一個RGB圖像,但是對於一些共振,'Mat'類型是'CV_8UC1'。任何想法是爲什麼? – noamgot