Mat对象
Mat对象是OpenCV中用来存储图像信息的内存对象,当通过Imgcodecd.imread()方法读入一个图像文件时,就会返回一个Mat对象实例
读取与写入
读取
Imgcodecs.imread("C:\\test\\tx.jpg");
他有两个重载的方法
public static Mat imread(String 文件名) ;
public static Mat imread(String 文件名 , int 加载图像类型) ;
加载图像类型
IMREAD_UNCHANGED 如果设置,则按原样返回加载的图像(使用Alpha通道,否则将被裁剪)。
IMREAD_GRAYSCALE 如果设置,则始终将图像转换为单通道灰度图像(编解码器内部转换)。
IMREAD_COLOR 如果设置,请始终将图像转换为3通道BGR彩色图像。
IMREAD_ANYDEPTH 如果设置,则当输入具有相应的深度时返回16位/ 32位图像,否则将其转换为8位。
IMREAD_ANYCOLOR 如果设置,则以任何可能的颜色格式读取图像。
IMREAD_LOAD_GDAL 如果已设置,请使用gdal驱动程序加载图像。
IMREAD_REDUCED_GRAYSCALE_2 如果设置,则始终将图像转换为单通道灰度图像,并且图像尺寸减小1/2。
IMREAD_REDUCED_COLOR_2 如果设置,请始终将图像转换为3通道BGR彩色图像,并且图像尺寸减小1/2。
IMREAD_REDUCED_GRAYSCALE_4 如果设置,则始终将图像转换为单通道灰度图像,并且图像尺寸减小1/4。
IMREAD_REDUCED_COLOR_4 如果设置,请始终将图像转换为3通道BGR彩色图像,并且图像尺寸减小1/4。
IMREAD_REDUCED_GRAYSCALE_8 如果设置,请始终将图像转换为单通道灰度图像,并且图像尺寸减小1/8。
IMREAD_REDUCED_COLOR_8 如果设置,请始终将图像转换为3通道BGR彩色图像,并且图像尺寸减小1/8。
IMREAD_IGNORE_ORIENTATION 如果已设置,请不要根据EXIF的方向标志旋转图像。
这里我们拿灰度图像进行测试
Mat img = Imgcodecs.imread("C:\\test\\tx.jpg",Imgcodecs.IMREAD_GRAYSCALE);
写入
图像写入的代码一下所示
Imgcodecs.imwrite("C:\\test\\tx_g.jpg",img);
他也有两个重载的方法
public static boolean imwrite(String 文件名, Mat 要写入的对象);
public static boolean imwrite(String 文件名, Mat 要写入的对象, MatOfInt 参数);
参数:
- 例如要保存成png格式、tif格式等,用到这里的参数
- 由于参数太多,这里就不列举了 可以查看api
- https://docs.opencv.org/4.2.0/d4/da8/group__imgcodecs.html
这里我们就说第一个,第二种暂时用不到
这里我给大家示范了一下
获取Mat对象的信息
使用如下代码从Mat对象中得到图像的宽、高、维度、通道数、深度、类型信息:
int width = img.cols();//宽
int height = img.rows();//高
int dims = img.dims();//维度
int channels = img.channels();//通道数
int depth = img.depth();//深度
int type = img.type();//类型
Mat对象的创建与初始化
Mat对象的创建
Mat m1 = new Mat();
m1.create(new Size(3,3), CvType.CV_8UC3);
Mat m2 = new Mat(3,3,CvType.CV_8UC3);
Mat 对象的拷贝与克隆
通过Mat的 copyTo()与clone方法实现对象的拷贝与克隆
- 克隆
Mat m1 = img.clone();
- 拷贝
Mat m2 = new Mat();
img.copyTo(m2);