Android设备中的OpenCV Java API还是OpenCV C++API



我看到了在Android设备中使用OpenCV的两种方法:

  1. 使用Java OpenCV API
  2. 使用C++OpenCV API

我的问题是:哪一个更好、更快、更容易配置/编码?或者,如果我的问题是错的,每种方式的利弊是什么?我阅读了OpenCV文档和几篇文章,但找不到问题的答案。

我想它必须对应用程序的实现做更多的工作。它是java还是c++(本机(应用程序?图像处理是应用程序的重要负载吗?您需要计算速度还是实现速度?无论如何,我已经通过JNI和NDK在java中使用了OpenCV(C++实现(。我的应用程序的核心是图像处理,处理速度非常符合我的兴趣(几乎是实时的(。一切都是用C++编写的,因为我的成像系统既有桌面实现,也有移动实现。

在移动应用程序(适用于android(中,我的成像系统嵌入在一个java应用程序中。从这里,我看到处理分为两部分:图像采集(通过设备摄像头(和图像处理(通过OpenCV(。图像采集都是用java实现的。这项工作并非微不足道,因为我发现的主要问题是从相机(本机为YUV(获取RGB帧,将它们传递给OpenCV,从OpenCV接收结果,并将它们渲染到应用程序的surfaceview。

相机和OpenCV的接口确实会让人头疼,这主要取决于您的设备功能和SDK版本。在获取图像后,处理相对来说是无痛的。我所有的系统之前都在我的电脑上调试过,我完全知道会发生什么。所有的OpenCV函数都正常工作,所以我对这部分几乎没有任何问题。

我也花了很多时间在C++中工作,所以这是决定选择哪种实现的一个因素。现在,应用程序基本上已经设置好了。我可以添加新功能并在我的电脑中进行测试,并相当快地更新移动端口。

OpenCV Java API是在Android上使用OpenCV的标准方式。它基本上是C++API之上的Java层,其中每个OpenCV Java函数都通过JNI(Java Native Interface(调用其C++等价物。

当使用Javaneneneba API时,进行JNI调用会导致少量开销,从而增加OpenCV函数的执行时间。如果您的图像处理管道对OpenCV函数进行了大量调用(比如说N次调用(,那么JNI调用开销将影响管道的N倍,这可能会降低您的总计算时间。

另一种选择是用C++实现整个图像处理管道,并从Java调用该C++代码,从而将开销减少到只有一个JNI调用。

OpenCV C++优点:

  1. 速度
  2. 现有C++代码的可重用性
  3. 所有OpenCV API可用

OpenCV Java专业人士:

  1. 更易于部署
  2. 更易于实施
  3. 更易于调试

请查看它的开放cv android版本

https://docs.opencv.org/2.4/doc/tutorials/introduction/android_binary_package/O4A_SDK.html

最新更新