基本上有两种选择:OpenCV 和 FastCV
OpenCV 是一个更成熟的库,具有比 FastCV 更多的功能。对于许多计算机视觉任务,您只能在 FastCV 中找到最基本的功能,而您可以在 OpenCV 中找到几乎所有流行的替代方案。例如,检查可用的特征检测器。OpenCV 有 Harris、SURF、SIFT、FAST 等。另一方面,FastCV 只有 Harris 和 FAST。OpenCV 包含针对不同硬件的硬件优化,包括台式计算机和移动计算设备。在桌面上使用 OpenCV 的能力为您提供了更灵活的开发选项,因为您可以在开始进行移动开发之前在快速的桌面计算机上调整和测试代码。OpenCV 也被视为Khronos 计算机视觉小组提案的一部分. 因此,如果获得批准,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 是可供选择的替代方案。