【问题标题】:When do we need the NDK for OpenCV Android我们什么时候需要 OpenCV Android 的 NDK
【发布时间】:2014-01-26 15:25:29
【问题描述】:

我刚刚开始学习适用于 Android 的 OpenCV,我已经玩过它了,一切正常。

我安装了 NDK 并设法运行了一些包含它的示例应用程序。

我不清楚我们需要 NDK 做什么。我在文档中的任何地方都找不到它的引用。

是否存在常规库 2.4.8 中没有的 OpenCV 功能?

是否只是为了我们可以使用其他人提供的用 c++ 编写的模块,而无需在 java 中重写它们?

【问题讨论】:

  • Ndk 用于生成共享对象文件(.so)。一旦生成了so文件,c/c++中的模块就可以在运行时通过java原生接口使用。
  • 谢谢,我知道,但是 OpenCV 的哪些功能需要 C++?具体

标签: android opencv android-ndk


【解决方案1】:

我一直在为我的应用程序使用 NDK,以下是我的 观察。

  1. 是的,它提供了使用大量 c++ 的优势 可用的模块。
  2. 如果你已经有一点 有使用openCV进行计算机视觉应用程序编程的经验 C++ 中的库,您不必学习 java 中的新语法(可以相当 有时很烦人)。
  3. 在您的应用程序中使用 NDK 可以让您在
    方面稍占上风 当你做的图像处理是计算时的性能 要求很高(我对此不太确定,因为 openCV 可用于 Android 的库只是围绕 相同的头文件和东西,并且应该几乎提供与 NDK 相同的性能。我从来没有真正比较过 我自己的表现,但在各种博客中读到 NDK 更快)。
  4. 一件事 使用 NDK 时你真的必须小心,是从 JAVA 调用 NDK 方面或相反,这些调用在性能方面可能非常昂贵(需要仔细规划)。
  5. 将一些参数(如 MAT 数组)从 JAVA 传递到 NDK 有点麻烦 头痛,但您可以找到一些解决方法。

根据您可能从各种来源发现的这些和其他因素以及您的编程优势,您可以决定是否要使用 NDK。我从来没有真正找到一套指导方针,说如果满足某些条件,您可以使用 NDK,人们只是从他们更熟悉的编程风格开始。

【讨论】:

  • 谢谢,感觉已经够上手了。我注意到找到 c++ 示例代码要容易得多。
  • 虽然你会发现更多的 C++ 示例(其中许多会随着 OpenCV 库的进展而过时),但 Java 将更容易编程,除非你已经有良好的 C++ 经验。
【解决方案2】:

在 Android 文档中,他们建议在以下情况下使用 NDK

# CPU-intensive operations that don't allocate much memory,
# such as signal processing, physics simulation, and so on.

如果您想做的所有事情都可以使用 OpenCV 内置函数来计算,那么您可能不需要 NDK,因为 OpenCV 的处理例程已经在 C/C++ 中。

但是,如果您必须集中处理图像矩阵(我的意思是直接访问像素),您将使用 NDK 提高性能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-17
    • 2011-12-19
    • 1970-01-01
    • 1970-01-01
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    相关资源
    最近更新 更多