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
OpenCV 的 Python 或 C++ 编码之间的性能是不是不同?
C++ 本机 Vs C++/Cli 性能(用于 OpenCV 项目)