在使用Android开发过程中,需要对图形图像进行处理的时候,一般都会使用OpenCV这个强大的视觉库,然而对很多新接触OpenCV的同学们,在安装官方给的sample时候,必须要安装OpenCV Manager,否则会出现找不到库的错误,刚开始的时候我也很纠结,后来在网上找了些资料,官网上也查了查文档,发现简单的几步就可以实现不用OpenCV Manager。
下面把我的部分代码贴出来,大家在使用官方的sample时候,可以参考一下
1、修改jni的Android.mk文件,把OpenCV的那部分,将off设置为on,并设置OpenCV_LIB_TYPE为SHARED,表示动态引用OpenCV的so库
OpenCV_CAMERA_MODULES:=on
OpenCV_INSTALL_MODULES:=on
OpenCV_LIB_TYPE:=SHARED
2、在Java代码中使用静态初始化块代码,使用libopencv_java.so和自己需要的so文件
static
{ System.
loadLibrary
(
"opencv_java"
); System.
loadLibrary
(
"abc"
);
//自己需要的so文件
}
3、在使用OpenCV的Java类中,删除penCVLoader.initAsync(),不使用OpenCV Manager。
public void onResume() {
super.onResume();
//OpenCVLoader.initAsync(OpenCVLoader.OpenCV_VERSION_2_4_3, this, mLoaderCallback);
}
4、修改Java类中的OnCreate()方法,如同在官方sample中,从上面的回调方法 private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this)代码块中的业务逻辑,复制放到OnCreate的setContentView()后,也就是说,自己写的业务逻辑,要放在OnCreate的setContentView()后,然后拷贝mOpenCVCameraView.enableView();放到mOpenCVCa meraView= (CameraBridgeViewBase) findViewById(R.id.
..
)后面,即可在publicMat onCameraFrame() 方法中使用照相机进行开发,顺便提一句,如果使用JNI开发,调用C++程序,也是在该方法中,把Mat对象的两个long型参数传递到C++端。
5、卸载OpenCV Manager,然后重新调试运行即可。