这段时间一直在学习opencv在android平台上的应用,因此打算把学习的过程记录下来,就当是学习笔记吧.
opencv在android平台上的部署有两种方式:
- 手机安装OpencvManager.apk,然后项目导入OpenCVSDK的Java库,使用
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_13, context, mLoaderCallback);
以AIDL多进程通信的方式,使用OpencvManager的服务进行OpenCV的运算. - 将OpenCV的native部分集成在App自己本身,但这会让apk安装包大一些.
其实这两种方法都差不多,首先去官网把OpenCV-android-sdk.zip下载下来,然后在android studio里面File|import module
选择sdk目录下的./java文件夹就好了.
但这样配置好之后还不能直接使用,因为opencv在使用之前还需要检查一下是否安装了OpenCV管理器,如果没有安装则会弹出提示框告诉你要去下载安装才能进行后续的操作
@Override
public void onResume() {
super.onResume();
//使用前必须要loader成功才可以.
if (!OpenCVLoader.initDebug()) {
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_13, this, mLoaderCallback);
} else {
mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
}
}
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS: {
Log.i(TAG, "OpenCV loaded successfully");
//loader成功,在这里完成你的工作.↓
//<editor-fold desc="高斯模糊">
ImageView image_src = (ImageView) findViewById(R.id.image_src);
ImageView image_result = (ImageView) findViewById(R.id.image_result);
Bitmap src = BitmapFactory.decodeResource(getResources(), R.drawable.image);
Mat mat = new Mat(src.getWidth(), src.getHeight(), CvType.CV_8UC4);
Utils.bitmapToMat(src, mat);
Imgproc.blur(mat, mat, new Size(30, 30));
Bitmap bitmap = Bitmap.createBitmap(mat.cols(), mat.rows(), Bitmap.Config.ARGB_8888);
Utils.matToBitmap(mat, bitmap);
image_src.setImageBitmap(src);
image_result.setImageBitmap(bitmap);
//</editor-fold>
}
break;
default: {
super.onManagerConnected(status);
}
break;
}
}
};
程序运行之后成功显示出模糊效果既成功.
另外如果不想安装OpenCVManager.apk,则需要我们把opencv的库全部集成到我们自己的项目中去,其实也非常简单,只需要把opencv_sdk中的OpenCV-android-sdk\sdk\native\libs
放到我们自己项目的jnilibs文件夹就可以了.
最后集成完试试效果,图片高斯模糊:
本地集成的DEMO:https://github.com/miqt/OpenCVforAndroid