C++ 原生 OpenCV 到 opencv4android 端口太慢?

Posted

技术标签:

【中文标题】C++ 原生 OpenCV 到 opencv4android 端口太慢?【英文标题】:C++ native OpenCV to opencv4android port too slow? 【发布时间】:2016-02-02 15:27:27 【问题描述】:

我正在将一些 C++ OpenCV 桌面代码移植到 android 并使用 opencv4android。我计划最终切换到 NTK,但现在,由于我对 Android 开发非常陌生,我认为这样会更容易进行。

OpenCV 函数在我的 i7-4790 桌面(单线程且无 GPU)上耗时 37 毫秒。 Android Nexus 4 上的函数耗时 10,557 毫秒。我知道我可以预期 java 到本机调用开销会有所放缓,但这种巨大的差异似乎很难解释。我正在使用 get/put 但在相对较小的图像(大约 500x500 像素)上进行很多每像素操作。

我把我的opencv函数放在下面的方法中:

private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) 

    @Override
    public void onManagerConnected(int status) 

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

是否有问题(可能与线程有关)或性能正常?我应该期待什么样的减速? NTK 怎么样?

非常感谢,

纪尧姆

【问题讨论】:

我将像素访问代码切换为尽可能复制 java 数组中的所有数据,并尽可能在计算后立即将所有数据复制回 mat,如 link。我还将一些文件 I/O 内容移到了定时计算之外,我的时间降低到了大约 4,000 毫秒,现在大约慢了 100 倍...... 【参考方案1】:

对于那些感兴趣的人,我刚刚完成了 NTK 版本。大约需要125ms,所以加速确实相当可观。

【讨论】:

你有我们可以看到的ntk(你是说ndk)代码吗?

以上是关于C++ 原生 OpenCV 到 opencv4android 端口太慢?的主要内容,如果未能解决你的问题,请参考以下文章

基于OpenCV和C++原生(JNI)的Android数字图像处理+人脸识别demo

如何调查随机Android原生函数调用错误?

OpenCV 的 Python 或 C++ 编码之间的性能是不是不同?

C++ 本机 Vs C++/Cli 性能(用于 OpenCV 项目)

如何在 OSX 中使用 C++ opencv highgui 将活动窗口设置为 opencv 图像

在实时视频中仅更改 Mat 的一部分 OpenCV Native C++ Android Studio