繁体   English   中英

Android 设备中的 OpenCV Java API 或 OpenCV C++ API?

[英]OpenCV Java API or OpenCV C++ API in Android devices?

我见过两种在 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 接收结果并将它们渲染到应用程序的表面视图。

连接相机和 OpenCV 确实令人头疼,这主要取决于您的设备功能和 SDK 版本。 获取图像后,处理相对轻松。 我所有的系统之前都在我的 PC 上调试过,我确切地知道会发生什么。 所有 OpenCV 函数都按其应有的方式运行,因此我对这部分几乎没有问题。

我也花了很多时间在 C++ 上工作,所以这是决定选择什么样的实现的一个因素。 现在,该应用程序已基本设置完毕。 我可以添加新功能并在我的 PC 上测试它们,并相当快地更新移动端口。

OpenCV Java API 是在 Android 上使用 OpenCV 的标准方式。 它基本上是 C++ API 之上的 Java 层,其中每个 OpenCV Java 函数都通过 JNI( Java 本机接口)调用其 C++ 等效项。

进行 JNI 调用会产生少量开销,从而在使用 Java API 时增加 OpenCV 函数的执行时间。 如果您的图像处理管道对 OpenCV 函数进行了大量调用(假设为 N 次调用),那么 JNI 调用开销将影响管道的 N 倍,这会减慢您的总计算时间。

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

OpenCV C++ 优点:

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

OpenCV Java 优点:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM