特殊的Mat类汇总
- 特殊的Mat类汇总
- 一、MatOfByte
- 1.构造函数
- 2.方法介绍
- 1.alloc
- 2.fromArray
- 3.fromList
- 4.toArray
- 5.toList
- 二、MatOfDouble
- 1.构造函数
- 2.方法介绍
- 三、MatOfFloat
- 1.构造函数
- 2.方法介绍
- 四、MatOfFloat4
- 1.构造函数
- 2.方法介绍
- 五、MatOfFloat6
- 1.构造函数
- 2.方法介绍
- 六、MatOfInt
- 1.构造函数
- 2.方法介绍
- 七、MatOfInt4
- 1.构造函数
- 2.方法介绍
(嵌套类)进行说明,后面遇到的时候就不再单独去说了。
特殊的Mat类汇总
本节中列举的所有类的作用都可以用于读取和写入图像的不同类型的数据。
一、MatOfByte
一个特殊的Mat类,用于存储图像的字节(byte)数据
1.构造函数
- 创建一个MatOfByte对象,并初始化其数据。
MatOfByte(int offset, int length, byte... a) | |
参数: | |
offset | 表示从数组a的哪个位置开始拷贝数据 |
length | 拷贝的数据长度 |
a | 要拷贝的字节数组 |
通过这个构造函数,可以将一个字节数组的一部分数据拷贝到MatOfByte对象中,用于表示图像或矩阵的字节数据。
byte data[]={1,2,3,4,5,6};
//从data数组的第3个位置开始拷贝,拷贝3个
MatOfByte matOfByte= new MatOfByte(2,3,data);
System.out.println("matOfByte.dump() :\n" + matOfByte.dump());
2.将给定的Mat对象转换为MatOfByte对象
MatOfByte(Mat m) | |
参数: | |
m | mat对象 |
根据源码mat对象数据类型须是CV_8UC1,且为1行多列或1列多行的数据格式,(不过经过验证其它单通道类型的数据也是可以的)。
源码:
public MatOfByte(Mat m) {
super(m, Range.all());
if( !empty() && checkVector(_channels, _depth) < 0 )
throw new IllegalArgumentException("Incompatible Mat");
//FIXME: do we need release() here?
}
示例:
Mat mat = new Mat(1,3, CvType.CV_8UC1);
mat.put(0,0,1,2,3);
//将mat转换为MatOfByte对象
MatOfByte matOfByte= new MatOfByte(mat);
System.out.println("matOfByte.dump() :\n" + matOfByte.dump());
2.方法介绍
1.alloc
这个方法的作用是为MatOfByte对象分配足够的内存空间来存储指定数量的元素。这个方法可以用于在创建MatOfByte对象之后,为其分配所需的内存空间。
例如,如果你知道你将要存储100个字节数据,你可以调用alloc(100)来为MatOfByte对象分配足够的内存空间,以便能够存储这100个字节。这样,你就可以在MatOfByte对象中存储字节数据了
2.fromArray
将给定的字节数组转化为MatOfByte对象
1.
fromArray(byte... a) | |
参数: | |
a | 字节数据 |
2.
fromArray(int offset, int length, byte... a) | |
参数: | |
offset | 表示从数组a的哪个位置开始拷贝数据 |
length | 拷贝的数据长度 |
a | 要拷贝的字节数组 |
3.fromList
用于将 List 类型的数据转换为 MatOfByte 对象。
//创建一个空的matOfByte
MatOfByte matOfByte= new MatOfByte();
//创建bl集合
List bl =new ArrayList<>();
bl.add((byte) 1);
bl.add((byte) 2);
bl.add((byte) 3);
matOfByte.fromList(bl);
System.out.println("matOfByte.dump() :\n " + matOfByte.dump());
4.toArray
将MatOfByte对象转换为byte数组
5.toList
将MatOfByte对象转换为byte集合
二、MatOfDouble
通过使用MatOfDouble类,可以方便地进行双精度浮点数类型的矩阵数据的处理和操作
1.构造函数
这里只列举其中一个构造函数。
MatOfDouble(Mat m) | |
参数: | |
m | mat数据类型需为CV_64FC1,且需要1行或1列 |
Mat mat = new Mat(1,3, CvType.CV_64FC1);
mat.put(0,0,1,2,3);
System.out.println("mat.dump() :\n " + mat.dump());
MatOfDouble matOfDouble = new MatOfDouble(mat);
System.out.println("matOfDouble.dump() :\n " + matOfDouble.dump());
2.方法介绍
参考MatOfByte-方法介绍
三、MatOfFloat
MatOfFloat类的主要作用是提供了一种方便的方式来表示和操作浮点数类型的矩阵数据
1.构造函数
这里只列举其中一个构造函数。
MatOfFloat(Mat m) | |
参数: | |
m | mat数据类型需为 CV_32FC1,且需要1行或1列 |
Mat mat=new Mat(1,3, CvType.CV_32FC1);
mat.put(0,0,1,2,3);
MatOfFloat matOfFloat=new MatOfFloat(mat);
System.out.println("matOfFloat.dump() :\n " + matOfFloat.dump());
2.方法介绍
参考MatOfByte-方法介绍
四、MatOfFloat4
MatOfFloat4类可以用来存储4个浮点数的矩阵
1.构造函数
这里只列举其中一个构造函数。
MatOfFloat4(Mat m) | |
参数: | |
m | mat数据类型需为 CV_32FC4,且需要1行或1列 |
Mat mat=new Mat(1,3, CvType.CV_32FC4);
MatOfFloat4 matOfFloat=new MatOfFloat4(mat);
System.out.println("matOfFloat4.dump() :\n " + matOfFloat.dump());
2.方法介绍
参考MatOfByte-方法介绍
五、MatOfFloat6
MatOfFloat6类可以用来存储6个浮点数的矩阵
1.构造函数
这里只列举其中一个构造函数。
MatOfFloat6(Mat m) | |
参数: | |
m | mat数据类型需为 CV_32FC(6),且需要1行或1列 |
Mat mat=new Mat(3,1, CvType.CV_32FC(6));
MatOfFloat6 matOfFloat=new MatOfFloat6(mat);
System.out.println("matOfFloat6.dump() :\n " + matOfFloat.dump());
2.方法介绍
参考MatOfByte-方法介绍
六、MatOfInt
MatOfInt类是用来表示一个整数类型的矩阵
1.构造函数
这里只列举其中一个构造函数。
MatOfInt(Mat m) | |
参数: | |
m | mat数据类型需为 CV_32SC1,且需要1行或1列 |
Mat mat=new Mat(1,3, CvType.CV_32SC1);
MatOfInt matOfInt=new MatOfInt(mat);
System.out.println("matOfInt.dump() :\n " + matOfInt.dump());
2.方法介绍
参考MatOfByte-方法介绍
七、MatOfInt4
MatOfInt4用来存储和操作四个整数类型的矩阵
1.构造函数
这里只列举其中一个构造函数。
MatOfInt4(Mat m) | |
参数: | |
m | mat数据类型需为 CV_32SC4,且需要1行或1列 |
Mat mat=new Mat(3,1, CvType.CV_32SC4);
MatOfInt4 matOfInt=new MatOfInt4(mat);
System.out.println("matOfInt4.dump() :\n " + matOfInt.dump());
2.方法介绍
参考MatOfByte-方法介绍