Android Studio使用OpenCV进行图像基本处理
1.环境配置
①进入OpenCV官网下载SDK包
进入官网(https://opencv.org/releases/)选择"Android"版本下载,我下载了3.4.16版本
解压后的文件目录:
-
sdk 目录提供了Android的API与Java 库
-
sdk/java 目录包含了一个 Eclipse 项目,该项目提供 OpenCV 的Java API,且可以导入到开发环境里。
-
sdk/native 目录包含了OpenCV C++ 头文件(用于JNI),与Android的 .so动态库 .a静态库。
-
sdk/etc 目录包含了Haar 与 LBP cascades 级联。
-
apk 目录包含了用户安装在指定的Android设备的安装文件,该文件使opencv 库可以管理opencv API(对应于各内核版本的OpenCV应用安装包)
-
samples :目录中存放着若干opencv应用例子,可为我们进行android下的opencv开发提供参考
②导入模块到项目中
1.Android Studio 下载cmake和ndk
2.选择 File -> New ->Import Module
3.选择下载的SDK包中的sdk/java
4.点击Finish
5.修改导入OpenCV的build.gradle的对应的compileSdkVersion等信息
6.修改build.gradle将module改为以library形式存在
7.加入依赖:设置module 的依赖 OpenCV lib
点击Apply
8.导入so库
在 app/src/main 目录下 创建一个jniLibs 目录,然后把sdk/native/libs 下所有文件 拷贝到jniLibs下
至此Android Studio下OpenCV环境配置完成
2.图像基本处理
1.灰度处理
将彩色图像转化为灰度图像
调用cvtColor方法,参数选择cv2.COLOR_BGR2GRAY
private void Togray(){
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.mipmap.onetemp);
Mat src = new Mat();
Mat dst = new Mat();
Utils.bitmapToMat(bitmap,src);
Imgproc.cvtColor(src,dst,Imgproc.COLOR_BGR2GRAY);
Utils.matToBitmap(dst,bitmap);
iv.setImageBitmap(bitmap);
src.release();
dst.release();
}
效果展示:
2.腐蚀和膨胀
①腐蚀操作
腐蚀操作会去除图像中,多余的白色噪点,增强黑色的部分(增强识别)
OpenCV中提供给了erode()函数来完成腐蚀操作
private void Tocorrosion(){
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.mipmap.onetemp);
Mat src = new Mat();
Mat dst = new Mat();
Mat element = Imgproc.getStructuringElement(MORPH_RECT, new Size(10,10));;
Utils.bitmapToMat(bitmap,src);
Imgproc.erode(src, dst, element);
Utils.matToBitmap(dst,bitmap);
iv.setImageBitmap(bitmap);
src.release();
dst.release();
}
效果展示:
②膨胀操作
膨胀操作会把白色线条加粗,白色的线条勾勒的物体会变成白色一块区域(增强识别)
OpenCV中提供给了dilate()函数来完成膨胀操作
private void Todilate(){
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.mipmap.onetemp);
Mat src = new Mat();
Mat dst = new Mat();
Mat element = Imgproc.getStructuringElement(MORPH_RECT, new Size(10,10));;
Utils.bitmapToMat(bitmap,src);
Imgproc.dilate(src, dst, element);
Utils.matToBitmap(dst,bitmap);
iv.setImageBitmap(bitmap);
src.release();
dst.release();
}
效果展示:
3.中值滤波
OpenCV中提供给了medianBlur()函数来完成中值滤波操作
private void TomedianBlur(){
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.mipmap.onetemp);
Mat src = new Mat();
Mat ret = new Mat();
Utils.bitmapToMat(bitmap, src);
Imgproc.medianBlur(src, ret, 77);
Utils.matToBitmap(ret, bitmap);
iv.setImageBitmap(bitmap);
src.release();
ret.release();
}
效果展示:
4.高斯模糊
OpenCV中提供给了GaussianBlur()函数来完成高斯模糊操作
private void ToGaussian(){
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.mipmap.onetemp);
Mat src = new Mat();
Mat ret = new Mat();
Utils.bitmapToMat(bitmap, src);
Imgproc.GaussianBlur(src,ret,new Size(77,77),5, 5);
Utils.matToBitmap(ret, bitmap);
iv.setImageBitmap(bitmap);
src.release();
ret.release();
}
效果展示:
5.Canny边缘检测
OpenCV中提供给了Canny()函数来完成图像边缘检测操作
private void CannyScan(){
Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.mipmap.onetemp);
Mat src = new Mat();
Utils.bitmapToMat(bitmap, src);
Mat gray = new Mat();
Imgproc.cvtColor(src,gray,Imgproc.COLOR_BGR2GRAY);
Mat ret = src.clone();
Imgproc.Canny(src, ret, 75, 200);
Utils.matToBitmap(ret, bitmap);
iv.setImageBitmap(bitmap);
src.release();
gray.release();
ret.release();
}
效果展示:
参考文档:
https://blog.csdn.net/weixin_43815930/article/details/90516455
http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/tutorials.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)