2016-02-02 135 views
2

我移植了一些C++ OpenCV的桌面代碼,Android和使用opencv4android。我打算改用NTK最終但是現在,因爲我是很新的Android開發,我認爲這將是更容易進行的方式。C++原生OpenCV到opencv4android端口太慢?

在OpenCV函數接受我的i7-4790桌面(單線程和沒有GPU)上僅爲37微秒。 Android Nexus 4上的功能需要10,557ms。我知道我可以期望java的本地通話開銷有所放緩,但是這種巨大的差異似乎很難解釋。我用get/put做了很多像素操作,但是在相對較小的圖像上(大約500x500px)。

我把我的OpenCV的功能在以下方法:

private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) { 

    @Override 
    public void onManagerConnected(int status) { 

     switch (status) { 
      case LoaderCallbackInterface.SUCCESS: 
      { 
       // opencv4android code 
       ... 
      } 
     } 
    } 
} 

有什麼問題(可能與線程)或性能是正常的嗎?我應該期待什麼樣的放緩? NTK怎麼樣?

非常感謝,

紀堯姆

+0

我切換像素的訪問代碼在Java數組中的所有數據時可能的,並且計算後一次全部複製回墊時儘可能在[鏈接](http://answers.opencv.org/question/5複製/如何對獲取和 - 修改 - 在象素的-MAT-中的Java /)。我也有些感動文件I/O的東西定時計算以外,我下降到約4,000ms,這大概是現在100X慢... – Guillaume

回答

0

對於那些有興趣,我只是完成了NTK版本。它大約需要125ms,所以加速確實相當可觀。

+1

你有你NTK(你的意思是NDK)的代碼,我們可以看到? – callyalater