Android 计算机视觉 JavaCV OpenCV FastCV 比较

标签 android opencv computer-vision javacv google-vision

我正在做学校项目,其中一部分应该是关于 Android 计算机视觉库的现状。我怀着极大的热情去研究它,因为计算机视觉似乎是一个引人入胜的学科,但我已经搜索了一个多星期,但没有找到太多。我希望能够提供有关图书馆本身以及它们之间比较的信息。

我将分享我目前的发现。

OpenCV

  • 似乎是最先进和最受欢迎的。

  • 提供最多的功能

  • 向后兼容性有问题

  • 速度很快(至少我听说过,但我对它的了解为零)

  • 关于它的书籍数量最多(至少对于 C++ 版本)

JavaCV

  • 是一些其他库的包装器,包括 opencv

快速CV

  • Qualcomm 的支持。

维基百科

  • 这更多是为了增强现实,但其核心仍然是计算机 愿景。

如您所见,我掌握了一些关于它的信息,并且我自己对每个库进行测试远远超出了我目前的计算机视觉技能。

亲切的问候,彼得。

最佳答案

基本上有两种选择:OpenCV和FastCV

OpenCV 是一个比 FastCV 具有更多功能的更成熟的库。对于许多计算机视觉任务,您只能在 FastCV 中找到最基本的功能,而在 OpenCV 中几乎可以使用所有流行的替代功能。例如,检查可用的特征检测器。 OpenCV 有 Harris、SURF、SIFT、FAST 等,而 FastCV 只有 Harris 和 FAST。 OpenCV 包含针对不同硬件(包括台式计算机和移动计算设备)的硬件优化。在桌面上使用 OpenCV 的能力为您提供了更灵活的开发选项,因为您可以在开始移动开发之前在快速的桌面计算机上调整和测试代码。 OpenCV 也被视为 a Khronos Computer Vision Group Proposal 的一部分.因此,如果获得批准,OpenCV 可以成为计算机视觉的标准 API。据我所知,FastCV 为 Snapdragon CPU 提供了卓越的优化。这可能在短期内对决策发挥重要作用,但我相信 OpenCV 会很快缩小差距(如果有的话)。

如果您选择 OpenCV 路径,则有两个子路径:带有 Android NDK 的 OpenCV 和带有 Android SDK 的 JavaCV。 JavaCV 是基于 JavaCpp 的 OpenCV 包装器。 JavaCV 主要封装了 C API,尽管 OpenCV 也提供了面向对象的 C++ API。例如,C++ API 会自动处理未使用内存的释放。但是,C API(因此称为 JavaCV)要求您手动处理未使用图像的释放。同样,当您在 JavaCV 中遇到问题时,很难解决问题,因为要检查的间接方法太多。直接使用OpenCV更容易定位问题。但是,对于 Android,不应忘记 NDK 的额外难度。

如果特定应用程序需要可用的 OpenCV 功能,并且不需要自定义像素级处理代码,则 JavaCV 是最佳选择。但是,如果需要大量自定义图像处理代码,Java 代码会减慢您的速度,无论如何您都需要切换到 NDK。在后一种情况下,OpenCV 是可供选择的备选方案。

关于Android 计算机视觉 JavaCV OpenCV FastCV 比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10673099/

相关文章:

Android Studio 无法识别可绘制对象中的 9patch 图像

java - 从操作栏中过滤 fragment 适配器

python - Raspberry Pi cv2.VideoCapture 卡在第二次初始化时具有相同的 ID

c++ - 有什么方法可以使用 OpenCV 进行基于特征的本地化吗?

opencv - 如何在整个视频中保存Farnebacks方法的流量估计?

android - 使用 Scala 合并 dex 文件时运行 Android APK 文件的问题

android - SourceSets - Groovy -> Kotlin DSL

python - 无法使用 cv2.VideoCapture(video_path).set(cv2.CAP_PROP_FPS, new_frame_rate) 更改输入视频的帧速率

c++ - 任何指标都可以衡量图像的渐晕效果?

ruby - 即使一张图像的裁剪/比例略有不同,我如何检测到两张图像是 "the same"?