java
Mat可以保存图片。图片RGB-是三通道,所以Mat也包含了通道数。
列举最常见的一些方法
文章目录
创建
Mat mat = new Mat(3,2, CvType.CV_32SC3);
第一二个参数是行列数,第三个参数是mat的类型。这里32SC3表示一个像素用了32位,S代表signed int,C3代表通道数是3。
即 创建一个3X2的矩阵,此矩阵具有3通道。每个点能保存int类型数据
未带通道数的默认是1。例如,CV_8U就等同于CV_8UC1,CV_32S就等同于CV_32SC1。
更常用的是Mat mat = Imgcodecs.imread();
理解如何保存
Mat mat = new Mat(3,2, CvType.CV_32SC3);
System.out.println(mat.dump());//数据矩阵的所有元素
输出如下:
3行2列。2列就是红色矩形框。一行三个元素是因为三个通道。
Mat mat = new Mat(3,2, CvType.CV_32SC3,new Scalar(1,2,4));
System.out.println(mat.dump());
下面均已这个例子举例。
get方法
一般得到一个数组,因为可能是多通道。
Mat mat = new Mat(3,2, CvType.CV_32SC3,new Scalar(1,2,4));
System.out.println(mat.dump());
System.out.println(mat.get(0,1)[0]);//第一行,第二列,通道1的元素:1
System.out.println(mat.get(0,1)[1]);//第一行,第二列,通道2的元素:2
System.out.println(mat.get(0,2)[0]);// 数组出界
put方法
放的数组要满足通道数的要求
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
Mat mat = new Mat(3,2, CvType.CV_32SC3,new Scalar(1,2,4));
System.out.println(mat.dump());
System.out.println(mat.get(0,1)[0]);
System.out.println(mat.get(0,1)[1]);
int[] am=new int[]{4,5,6};
mat.put(1,1,am);
System.out.println(mat.dump());
System.out.println(mat.get(1,1)[1]);
push_back
新添加的Mat和原来的Mat,需要列数,通道数相同。
mat.push_back(new Mat(4,2,CvType.CV_32SC3,new Scalar(0,0,0)));
System.out.println(mat.dump());
reshape
双参,第一个是通道数,第二个是行数。如果为0,新的矩阵和原矩阵的通道/行数相同。
无论怎么变,新矩阵的元素个数不变。
//reshape
Mat a=mat.reshape(2,1);
System.out.println(a.dump());
System.out.println(a.rows());
System.out.println(a.cols());
System.out.println(a.channels());
import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.Scalar;
public class SvmDEMO {
public static void main(String[] args) {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
Mat mat = new Mat(3,2, CvType.CV_32SC3,new Scalar(1,2,4));
System.out.println(mat.dump());
//get
System.out.println(mat.get(0,1)[0]);
System.out.println(mat.get(0,1)[1]);
int[] am=new int[]{4,5,6};
//put
mat.put(1,1,am);
System.out.println(mat.dump());
System.out.println(mat.get(1,1)[1]);
//push_back
mat.push_back(new Mat(4,2,CvType.CV_32SC3,new Scalar(9,9,9)));
System.out.println(mat.dump());
//reshape
Mat a=mat.reshape(2,1);
System.out.println(a.dump());
System.out.println(a.rows());
System.out.println(a.cols());
System.out.println(a.channels());
}
}