Android Studio 2.2 中引入opencv 2.4.11
准备材料
- Android Studio 2.2(百度网盘地址:https://pan.baidu.com/s/1c29ir4k)
- OpenCV-android-sdk(选择版本2.4.11: https://opencv.org/releases.html)
- SDK(基础包下载地址:https://pan.baidu.com/s/1dEEoALN,注意,这只是基础包,用它来继续下载你需要的其他工具包)
- JDK:1.8及以上即可(官网下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)
- 注:上面地址失效的话请自行下载对应的版本
引入步骤
- 新建一个android项目
- File->New->Import Module,如图
- 然后选下载好OpenCV-android-sdk(解压后)下的的java文件夹
- 导入成功会在当前的工作目录下看到
- 然后:File->Project Structure->app->Dependencies->+将openCVLibrary2411依赖到当前的android项目
添加依赖之后,就可以在项目中引用OpenCV相关API代码了,如果你此刻运行测试apk程序,它就会提示你安装OpenCV Manager这个东西。对多数开发者来说这不算配置成功,这样自己的APP就无法独立安装,必须依赖OpenCV Manager这个apk文件才可以运行,这个时候就该放大招来解决这个问题,首先把我们准备阶段看到SDK下面native文件下所有的文件都copy到你创建好的项目libs目录下,然后在gradle中加上如下一段脚本
task nativeLibsToJar(type: Jar, description: 'create a jar archive of the native libs') { destinationDir file("$buildDir/native-libs") baseName 'native-libs' from fileTree(dir: 'libs', include: '**/*.so') into 'lib/' } tasks.withType(JavaCompile) { compileTask -> compileTask.dependsOn(nativeLibsToJar) }
compile fileTree(dir: "$buildDir/native-libs", include: 'native-libs.jar')
- 注:位置
- 注:位置
测试代码
- 将图片灰度化,用弹出框的形式Icon进行测试,然后再onCreate函数中相继调用initOpenCV()函数和convertGray()函数
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化opencv库
initOpenCV();
//测试函数
convertGray();
}
//初始化opencv库
private void initOpenCV() {
OpenCVLoader.initDebug();
}
//函数测试
private void convertGray() {
Bitmap selectbp = BitmapFactory.decodeResource(getResources(), R.drawable.fenxi);
Mat src = new Mat();
Mat temp = new Mat();
Mat dst = new Mat();
Utils.bitmapToMat(selectbp, src);
Imgproc.cvtColor(src, temp, Imgproc.COLOR_BGRA2BGR);
Imgproc.cvtColor(temp, dst, Imgproc.COLOR_BGR2GRAY);
Utils.matToBitmap(dst, selectbp);
new AlertDialog.Builder(MainActivity.this).setIcon(new BitmapDrawable(selectbp)).setTitle("提示:").setMessage("hhh").show();
}
如果你能成功运行App,并且弹出框(Icon为灰度图),那么恭喜你,成功啦!
如果你没有成功的话,莫着急,来填坑吧
- 我遇到的一直是初始化失败(加载库失败)
- 改了一下几个内容(把源码都改了,哈哈)
- 版本问题:25以上的需要修改一下源码
- 修改之后的函数:
public static boolean initOpenCV(String Version, final Context AppContext, final LoaderCallbackInterface Callback) { AsyncServiceHelper helper = new AsyncServiceHelper(Version, AppContext, Callback); Intent intent = new Intent("org.opencv.engine.BIND"); intent.setPackage("org.opencv.engine"); if (AppContext.bindService(intent, helper.mServiceConnection, Context.BIND_AUTO_CREATE)) { return true; } else { AppContext.unbindService(helper.mServiceConnection); InstallService(AppContext, Callback); return false; } }
- 修改之后的函数:
- 复制依赖文件到项目下(将OpenCV-android-sdk下的native下的这三个文件夹复制到android项目下的app下的libs文件夹下),如图
- 版本号问题
- 版本问题:25以上的需要修改一下源码