Android Studio4.0+OpenCv4.3.0之Mat导入图片、创建、复制克隆、保存

什么是Mat

Mat是opencv中用来存储图片信息的内存对象。简单的说Mat就是一个矩阵,矩阵的行列体现图像的像素,矩阵中元素存放对应像素点数据。Mat和矩阵区别在于,矩阵元素是一个数,Mat元素是一个数组,数组中元素个数也就是图像的通道数(彩色图片通常是三通道或者四通道,灰度图片通常是一通道)。

常用的Mat API

导入一张图片

Mat src = Imgcodecs.imread(路径);
Mat src = Imgcodecs.imread(路径,图片类型);

图片类型(例子Imgcodecs.IMREAD_GRAYSCALE 加载图像为灰度图像)

图片属性

int width = src.cols();//宽
int height = src.rows();//高
int dims = src.dims();//维度,如 3 * 4 的矩阵为 2 维, 3 *4 * 5 的为3维
int channels = src.channels();//通道数
int depth = src.depth();//深度
int type = src.type();//类型

src为存放图片的Mat
图片来源网络图片来源网络
图片来源网络

创建Mat

Mat src= new Mat(new Size(3, 3),
CvType.CV_8SC1);//创建一个3*3有符号整型一通道Mat
byte[] data = {-1,-2,-1,0,0,0,1,2,1};//定义数据
src.put(0,0, data);//把数据填入Mat中

这里其实就是创建了一个Sobel算子。
当天创建Mat方法还有很多,需要大家自己去尝试对比。

Mat m1 = Mat.eye(行,列,类型);//创建一个对角矩阵
Mat m2 = Mat.zeros(行,列,类型);//创建一个全零矩阵
Mat m3 = Mat.ones(行,列,类型);//创建一个第一通道全一矩阵其他通道全零
//等

Mat拷贝与克隆

Mat m4 = new Mat(100,100,CvType.CV_8UC3); 
m4.setTo(new Scalar(127,127,127)); 
Mat m5 = new Mat();
m4.copyTo(m5);

Mat m4 = new Mat(100,100,CvType.CV_8UC3); 
m4.setTo(new Scalar(127,127,127)); 
Mat m5 = m4.clone(); 

Mat保存

//创建一张图片
Mat image = new Mat(100,100,CvType.CV_8UC3); 
image.setTo(new Scalar(127,127,127)); 
//保存
File fileDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),"image");
    if(!fileDir.exists()){
        fileDir.mkdirs();
    }//设置存储的文件夹名字
File tempFile = new File(fileDir.getAbsoluteFile()+File.separator,"image1.jpg");//设置文件名字
Imgcodecs.imwrite(tempFile.getAbsolutePath(),image);//保存

注意图片读写需要添加权限

在AndroidManifest.xml中的manifest中添加

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小灰机的记录本

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值