【问题标题】:OpenCV Java API or OpenCV C++ API in Android devices?Android 设备中的 OpenCV Java API 或 OpenCV C++ API?
【发布时间】:2020-06-28 02:55:38
【问题描述】:

我见过两种在 Android 设备中使用 OpenCV 的方法:

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

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

【问题讨论】:

    标签: java android c++ opencv


    【解决方案1】:
    【解决方案2】:

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

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

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

    我也花了很多时间在 C++ 上工作,所以这是决定选择哪种实现的一个因素。现在,该应用程序几乎已设置完毕。我可以添加新功能并在我的 PC 中进行测试,并很快更新移动端口。

    【讨论】:

    • 因为我还没有开始我的项目,所以任何东西(Java API 或 C++ API)都可以。因此,我想知道两者的优缺点。您的回复确实很有帮助,但不是我的问题的确切答案。无论如何谢谢你-@eldesgraciado :)
    • @Sherzod 没问题,伙计。如果你追求速度,那么考虑用 C++ 实现你的 OpenCV 系统。请注意,Java-C++ 接口可能会有点讨厌,因此还要考虑您可以使用的调试工具。只是我的两分钱的经验。希望您能够找到更具体的问题来回答您的问题。干杯!
    【解决方案3】:

    OpenCV Java API 是在 Android 中使用 OpenCV 的标准方式。它基本上是 C++ API 之上的 Java 层,其中每个 OpenCV Java 函数都通过 JNI (Java Native Interface) 调用其 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. 更容易调试

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-26
      • 1970-01-01
      • 2018-08-11
      • 2016-09-26
      • 1970-01-01
      • 2015-07-29
      • 2017-01-09
      • 1970-01-01
      相关资源
      最近更新 更多