Android opencv mat 相关操作

如上图,先创建一个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的通道数。

以上是个人理解,如有错误,恳请指正!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容