2016-09-13 96 views
1

我將模塊「OpenCV for Android」導入到Android Studio中,並試圖在Java代碼中實現我的圖像處理功能。Android Studio中的NDK和OpenCV設置

像Core.multiply和Core.add等大多數OpenCV方法都能正常工作,但是,我發現Mat.put()和Mat.get()等一些OpenCV方法效率不高,程序運行真正在我的設備中慢。

所以,我的問題是,

  1. 如果我Android Studio中建立NDK,這將讓我的程序運行得更快? (我認爲如果我在C++中使用指針,程序會更高效,我不確定這是否正確)

  2. 我以這種方式使用OpenCV方法Mat.get()和Mat.put()


    Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.testPhoto); 
    Mat m1 = new Mat(bitmap.getHeight(), bitmap.getWidth(), CvType.CV_8UC4); 
    Mat m2 = m1.clone(); 
    Utils.bitmapToMat(bitmap, m1); 
    byte[] arr = new byte[(int)(m1.total() * m1.channels())]; 
    m1.get(0,0,arr); 
    //some processing here... 
    m2.put(0,0,arr); 

那麼,有沒有使用Mat.get()和Mat.put()任何更有效的方式?

  1. 如果使用NDK是一種更好的方法,如何在Android項目中設置OpenCV和NDK?我試圖按照這個tutorial在Android Studio中設置NDK,但是一旦我設置了NDK,我就無法將OpenCV導入到我的項目中。
+0

當然,NDK opencv C++比java快得多。除非你使用非常大的矩陣,Mat.get和put不應該是一個緩慢的操作。無論如何,位圖類不是管理處理圖像的最佳類。但是,jni + C++ + opencv開發並不是很容易學習,您需要學習有關JMV虛擬機的不同概念。 – uelordi

回答

0

要設置OpenCV和NDK,首先在Android項目中導入OpenCV庫作爲模塊,並將其作爲依賴關係添加。然後你可以研究如何設置Android NDK。

通過BitmapFactory獲取圖像並傳入Mat後,您可以在NDK中處理圖像,使程序運行得更快更高效。