目录
Android Opencv 之 Android Studio 进行 opencv 4.2.0 环境搭建,并简单进行图片灰度处理demo
一、简单介绍
二、注意实现
三、Opencv for Android 下载
四、Android Studio (我的版本是3.6.2)新建一个工程
五、在Android Studio 工程中引入 Opencv 420
六、Android Studio 项目中 测试 opencv 功能,验证 opencv 导入成功与否
七、关键代码
在 Android 使用 opencv,进行图片处理。
本节介绍,如何在 Android 搭建 opencv 环境,并简单的demo测试在 Android 上使用 opencv
1、在使用的时候,把 opencv 模块中的 build.gradle 保持与引用的工程的 build.gradle 一致,不然打包的apk可能无法正常使用哈
1、百度搜索 opencv,进入 官网
2、进入官网点击 Release,找到 Android
3、点击就会跳转,弹出下载界面(不同浏览器界面可能不一样)
4、下载好后,进行解压
1、打开 Android Studio 新建一个工程
2、可以新建一个Empty Activity
3、去一个工程名
1、在新建的工程中, File - New - Import Module
2、找到下载好的 opencv ,解压下的 sdk 文件夹,引入
3、短暂时间后,就会编译成功
4、把引入的 Opencv 下的build.gradle 编译版本与 app 的保持一致
1、File - Project Structure ...
2、在 app 中添加依赖引用 opencv
3、新建一个脚本,继承 OpenCVInterface 接口,添加初始化代码
4、导入一张测试图片,然后再布局中添加一个 ImageView
5、编写 MainActivity ,进行初始化,和灰度图片处理
6、打包,运行在真机上,效果如下
1、MainActivity
package com.example.opencvndkandroid0502;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.widget.ImageView;
import org.opencv.android.BaseLoaderCallback;
import org.opencv.android.LoaderCallbackInterface;
import org.opencv.android.OpenCVLoader;
import org.opencv.android.Utils;
import org.opencv.core.Mat;
import org.opencv.imgproc.Imgproc;
import java.io.IOException;
public class MainActivity extends AppCompatActivity {
private ImageView mImageView;
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
super.onManagerConnected(status);
if (status == LoaderCallbackInterface.SUCCESS) {
//服务启动成功,灰度化图片显示到ImageView上
filterImage();
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mImageView = findViewById(R.id.sample_image);
new OpenCVNativeLoader().init();
}
@Override
protected void onResume() {
super.onResume();
if (!OpenCVLoader.initDebug()) {
//启动OpenCV服务
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION, getApplicationContext(), mLoaderCallback);
} else {
mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
}
}
//灰度化图片,暂不做代码说明,复制即可
private void filterImage() {
Mat imgMat = null;
try {
imgMat = Utils.loadResource(this, R.drawable.demo);
Imgproc.cvtColor(imgMat, imgMat, Imgproc.COLOR_RGB2BGR);
Mat resultMat = imgMat.clone();
Imgproc.cvtColor(imgMat,resultMat,Imgproc.COLOR_BGR2GRAY);
Bitmap bitmap = Bitmap.createBitmap(resultMat.cols(), resultMat.rows(), Bitmap.Config.ARGB_8888);
Utils.matToBitmap(resultMat, bitmap);
mImageView.setImageBitmap(bitmap);
} catch (IOException e) {
e.printStackTrace();
}
}
}
2、OpenCVNativeLoader
package com.example.opencvndkandroid0502;
import org.opencv.osgi.OpenCVInterface;
import java.util.logging.Level;
import java.util.logging.Logger;
public class OpenCVNativeLoader implements OpenCVInterface {
public void init() {
System.loadLibrary("opencv_java4");
Logger.getLogger("org.opencv.osgi").log(Level.INFO, "Successfully loaded OpenCV native library.");
}
}
3、activity_main.xml