前言
前面文章《OpenCV4Android中NDK开发(一)--- OpenCV4.1.0环境搭建》自己配置好了NDK的Opencv方法,因为在Android中使用最常见的还是摄像头实时处理,所以最近一直在研究摄像头和OpenCV之间的互助。
早些的文章《OpenCV简介与Android SDK环境》有介绍过加载OpenCV的模块直接用OpenCV中的摄像头,但是决定使用NDK方式就不想再进行模块导入加上NDK的方式了,在网上找了好久终于找到一篇《实时显示 Opencv处理后的Camera图像 AndroidStudio NDK方法》
原贴地址:
https://blog.csdn.net/u010677365/article/details/78344202
原作者的Github的源码在他原贴上,大家可以从原贴中下载
实现过程
我们下载下来后用Android Studio打开后CPP下面什么也没有
但是实际目录下是有文件的,所以我们要进行修改
一、首先把CMakeList文件改为我们自己的
从上图中我们看到原作者用到的是opencv3.3,而我现在已经改为最新的OpenCV4.1了,所以我们直接不再采用他的CMakeList文件,把《OpenCV4Android中NDK开发(一)--- OpenCV4.1.0环境搭建》中已经配置好的CMakeList文件直接拷贝到src/main/cpp的文件夹下
二、修改build.gradle配置文件
上图中要改的一个是CMakeLists.txt的文件位置
还有下面两项,这个在我前面的文章也有
然后我们重新Sync一下,可以看到CPP下已经把对应的都显示出来了
三、修改对应的文件
分别点开这几个文件后,发现里面有个include<cv.h>是红色的
我看应该也是因为OpenCV的版本问题,所以我们直接把这一行删除了,对应的文件里面没有的我们就修改一下即可,如下图
四、修改CMakeList.txt文件
因为在cpp下面多了个两个相关的cpp的文件,所以我们要在CMakeLIst.txt的add_library中加入进来
在相同的文件夹下统一加进来还有另一种写法
注:这里上面的框中“*.cpp”原来我写的是“src/main/cpp/*.cpp”,结果各种编译不了,一直报错,后来我直接写的“*.cpp”即可,原因就是我们的CMakeList文件是和这些CPP的文件在同一目录下的,找对应的文件它是按照CMakeList所在的目录开始查找 。
五、按JNI规范修改代码
改完这些后准备满心欢喜的Rebuild Project了,结果给我出现的下面的错
从上面看我找了一下GetIntArrayElements这个方法在native-lib.cpp中
点击进去看原方法参数也都没有问题
在网上找了找资料发现所以要传递的非c的false语法糖需要改成JNI_FALSE。
于是我们改过来
然后重新Rebuild Project就编译通过了。后面我会慢慢熟悉下这个工程,了解其用摄像头的方法与原理,慢慢吃透再写相关的文章。
-END-