按照使用语言角度,在Android下使用OpenCV有以下几种方式:
完全使用Java语言
完全使用C++语言
混合使用Java和C++语言
下面分别讲一下怎么做,并说明这样做可能需要注意的问题。
完全使用Java语言
开始我是希望完全用Java语言开发的(也就是使用OpenCV4Android),主要好处是:
开发效率高,我指的是Java比C++生产代码的速度要快一些,至少在我的团队是这样
编译环境搭建比较简单,尤其是通过async initialization的情况下
但是,有得就有失,OpenCV是C++写的,虽然OpenCV组织也推出了供开发者使用的OpenCV4Android,但并不是所有的OpenCV C++功能都能在OpenCV4Android中找到。这也挺好理解的,人家是先写出C++的功能,然后再考虑在OpenCV4Android中实现。
所以,使用OpenCV4Android的问题是有些功能OpenCV里有,但它没有。
另外一个问题是,需要在架构上避免频繁的JNI操作,这样对性能不利。如下图:
实际上,OpenCV4Android只是在原来C++本地库的基础上做了个Java/JNI的包装(wrapper)。
在开发上,又有两种加载OpenCV4Android的方式:
async initialization,这是官方