Mat类基础知识


一、MAT
1、OpenCV2中,数据结构Mat是保存图像像素信息的矩阵,它主要包含两部分:矩阵头和一个指向像素数据的矩阵指针。
2、 矩阵头主要包含,矩阵尺寸、存储方法、存储地址和引用次数等,矩阵头的大小是一个常数,不会随着图像的大小而改变,但是保存图像像素数据的矩阵则会随着图像的大小而改变,通常数据量会很大,比矩阵头大几个数量级。这样,在图像复制和传递过程中,主要的开销是由存放图像像素的矩阵而引起的。
3、OpenCV使用了引用次数,当进行图像复制和传递时,不再复制整个Mat数据,而只是复制矩阵头和指向像素矩阵的指针

Mat A ,C;//创建矩阵头
B = imread("F:...\\1.jpg");//读入图像
Mat B = A ;//使用赋值运算符
Mat C(A);//使用拷贝构造函数(浅拷贝)

上面的a,b有各自的矩阵头,但是其矩阵指针指向同一个矩阵,也就是其中任何一个改变了矩阵数据都会影响另外一个;
4、某些时候你仍会想拷贝矩阵本身(不只是信息头和矩阵指针),这时可以使用函数 clone() 或copyTo()

    Mat F = A.clone();
    Mat G;
    A.copyTo(G);

现在改变 F 或者 G 就不会影响 Mat 信息头所指向的矩阵


二、数据类型
常见的数据类型,通过调用depth()可得到

#define CV_8U   0
#define CV_8S   1
#define CV_16U  2
#define CV_16S  3
#define CV_32S  4
#define CV_32F  5
#define CV_64F  6

三、基本函数
1、M.create(4,4, CV_8UC(2))这个创建方法不能为矩阵设初值,它只是在改变尺寸时重新为矩阵数据开辟内存
2、对于小矩阵你可以用逗号分隔的初始化函数:

 Mat C = (Mat_<double>(3,3) << 0, -1, 0, -1, 5, -1, 0, -1, 0); 
 Mat F=C.col(1).clone();//取C第二列,注意索引从0开始
 Mat E=c.row(1).clone();//取第二行,用clone是为了开辟新的内存

3、调用函数 randu() 来对一个矩阵使用随机数填充,需要指定随机数的上界和下界

Mat R = Mat(3, 2, CV_8UC3);
randu(R, Scalar::all(0), Scalar::all(255));

4、

Mat::row(int y)//返回矩阵的某一行
Mat::col(int x)//返回矩阵的某一列
rows//返回行数
cols//返回列数

注:参考OpenCV2.3.2官方文档(中文)\core 模块. 核心功能\Mat - 基本图像容器 — OpenCV 2.3.2 documentation

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值