如上图,先创建一个5x5的无符号三通道矩阵(CvType.CV_8UC3),设置每个通道的值为12,25,110,Scalar是长度为4的double数组,其中第四个恒为0。
我们有时候需要将数据存入byte数组中,三通道的时候,需要声明一个数组大小为mat.rows()*mat.cols()*3,才能将mat的数据装下,通过mat.get(0,0,data),将数据存入data,通过mat.get可以获得每个点的值。打印数据如下:
data的值是mat每个点的三通道值,get获取一个点的多通道值double数组,如果不设置则默认为0。
同样,如果初始化mat为CvType.CV_8UC1,无符号单通道,则data的数组大小初始化为mat.rows()*mat.cols()即可。同时获取一个顶点的多通道double数组大小也为1,只有一个通道。
Mark:和c,c++不一样,Java版本的openCV实现mat和byte的转换主要通过get 和 put:
mat.get(0,0,data),可将mat的所有数据存入data,注意的是mat的通道,如果是多通道比如,3,4,则data的大小初始化为mat的rows()*cols()*N N为通道数;
mat.get(x,y)可以获取矩阵的某个点,返回的是double[],存着该点的多通道数据,默认为0;
mat.put(1,1,18,20,22); //前两个代表mat的rows和cols,后面是double... 如果是多通道,需要传入相同的个数,代表的是通道的值;
mat.put(0,0,data)可将data全部赋值到mat,同样要注意data的大小和mat的通道数。
以上是个人理解,如有错误,恳请指正!