由于项目需要,最近学习了一下android里配置及使用opencv进行图像处理的相关操作,总结一下~

我配置opencv的方法是参照了android调用usb摄像头这个开源项目,具体配置请参照,我主要总结一下android里使用opencv进行图像处理方面的使用

(一)读取和保存图像

import org.opencv.android.OpenCVLoader;import org.opencv.android.Utils;import org.opencv.core.Core;import org.opencv.core.CvType;import org.opencv.core.Mat;import org.opencv.imgproc.Imgproc;//android里使用opencv读取照片String filename = Environment.getExternalStorageDirectory()+"/image/RGBimg.jpg";Mat src = Imgcodecs.imread(filename); if(src.empty()) return;//android里使用opencv保存照片Mat srcGray = new Mat ();Imgproc.cvtColor(src, srcGray,Imgproc.COLOR_BGR2GRAY);String filenamesrcGray = Environment.getExternalStorageDirectory()+"/image/gray.jpg";Imgcodecs.imwrite(filenamesrcGray, srcGray);

(二)矩阵构建及图像像素层面操作

图像Mat构建:

//新建图像Mat,矩阵行数、列数、图像类型Mat image1=new Mat(480,640, CvType.CV_8UC3);///新建图像Mat,矩阵行数、列数、图像类型,以及矩阵的初始值(3通道,故为三个值)Mat image2=new Mat(new Size(640,480),CvType.CV_8UC3,new Scalar(255,0,0));

常见的图像类型有:CV_8UC1;CV_8UC3;CV_8UC4;CV_32SC3 ;CV_32FC3;CV_64FC3等,其通项表达式为:
CV_<颜色深度>(S|U|F)C<通道数>。

S代表SignedInt,有符号整型;
U代表UnsignedInt,无符号整型;
F代表Float,单精度浮点型或双精度浮点型。

像素操作实例:读取两张相同尺寸的RGB图像,然后生成并保存两张图像的平均值图像。

Mat img1 = Imgcodecs.imread("img1.jpg");Mat img2 = Imgcodecs.imread("img2.jpg");Mat averigeImg = img1 .clone();//用于保存平均值图像       for(int i=0;i<144;i++){     for(int j=0;j<144;j++){        double[] data1 = img1.get(i, j);        double[] data2 = img2.get(i, j);              averigeImg.put(i,j,(data1[0]+data2[0])/2,(data1[1]+data2[1])/2,(data1[2]+data2[2])/2);    }}Imgcodecs.imwrite("averigeImg.jpg", averigeImg);

(三)opencv常用的图像处理操作

3.1 RGB图像分离单个通道并保存,合成多个单通道为一副图像

try{Mat src=Imgcodecs.imread("./images/RGBimg.jpg");//读取图像到矩阵中,取灰度图像if(src.empty()){throw new Exception("no image");}        //分离RGB三个通道并保存        List dst=new java.util.ArrayList(3);Core.split(src, dst);Imgcodecs.imwrite("./images/b.jpg", dst.get(0));Imgcodecs.imwrite("./images/g.jpg", dst.get(1));Imgcodecs.imwrite("./images/r.jpg", dst.get(2));        //合成单通道为一副RGB图像Mat mergeBGR=new Mat();Core.merge(dst, mergeBGR);Imgcodecs.imwrite("./images/merge.jpg", mergeBGR);}catch(Exception e){System.out.println("error:" + e);}

 

参考:

https://blog.csdn.net/u012991166/article/details/77992757 

https://blog.csdn.net/alzm006/article/details/80801971

https://blog.csdn.net/byna11sina11/article/details/79044738

https://blog.csdn.net/sileixinhua/article/details/72811044?utm_source=blogxgwz6

https://blog.csdn.net/u013195275/article/details/79867781

https://blog.csdn.net/sileixinhua/article/details/72811044

更多相关文章

  1. Android图像篇
  2. [原]如何在Android用FFmpeg+SDL2.0解码图像线程
  3. android中 MediaStore提取缩略图和原始图像
  4. android:shape的使用 (android用xml文件生成图像控件)
  5. Android 图像处理资料
  6. [原]如何在Android用FFmpeg+SDL2.0解码显示图像
  7. Android - OpenCv - 解决预览图像自动旋转问题
  8. 2.4.11 网格视图和图像切换器
  9. c++输出二维字符矩阵对齐

随机推荐

  1. Android五种布局管理器之『LinearLayout
  2. android广播发送与接收演示DEMO
  3. android中自定义数据类型在两个activity
  4. Android图片特效处理之图片叠加
  5. Android硬件抽象Hardware库加载过程源码
  6. Android串口丢包重发的重传协议,一种流式
  7. String.xml
  8. Android平台开发中的重构三步走
  9. 【笔记】在Android上绘制小车行进路线图
  10. Android Managing Bitmap Memory And Loa