opencv的Mat类

Mat类

Mat是一个类:由2个数据部分组成:
1.矩阵头(包含矩阵尺寸、存储方法、存储地址等信息);
2.一个指向存储所有像素值的矩阵(根据所选的存储方法不同,矩阵可以是不同维数的)指针。

矩阵头的尺寸是常数,但矩阵本身尺寸的会依据图像不同而不同,通常比矩阵头的尺寸大数个数量级。

每个Mat对象有自己的信息头,但共享一个矩阵。这通过让矩阵指针指向同一个地址而实现,而拷贝构造函数只复制信息头和矩阵指针。

Mat A,C; //仅创建信息头部分
A=imread("1.jpg",CV_LOAD_IMAGE_COLOR) ;  //为矩阵开辟内存 
Mat B(A;
C=A;//赋值运算符

以上所有Mat对象都指向同一个也是唯一一个数据矩阵。虽然信息头不同,但是通过任何一个对象所作的改变也会影响其他对象。

想要创建一个感兴趣区域(ROI),只需要创建包含信息的信息头。
Mat D(A,Rect(10,10,100,100)); //使用矩形界定;
Mat E=A(Range:all(),Range(1,3)); //使用行和列来界定;

复制矩阵本身:
1.A.clone();
2.A.copyTo(G);

创建Mat对象的七种方法

一:Mat构造方法

Mat M(2,2,CV_8UC3,Scalar(0,0,255));
    CV_[位数][带符号与否][类型前缀]C[通道数]
而预定义的通道数可以多达4个。Scalar是个short型的向量,能使用指定的定制化值来初始化矩阵,还可以表示颜色。

二:在C\C++中通过构造函数进行初始化

int sz[3]={2,2,2};
Mat L(3,sz,CV_8UC,Scalar:all(0));
指定维数,然后传递一个指向一个数组的指针,这个数组包含每个维度的尺寸。

三:为已经存在的IpIImage指针创建信息头

//为已存在的IpIImage指针创建信息头
IpIImage *img=cvLoadImage("1.jpg",1);
Mat mtx(img);   //转换IplImage*->Mat
指定维数,然后传递一个指向一个数组的指针,这个数组包含每个维度的尺寸。

四:利用Create()函数

//利用Mat类中的Create()成员函数进行Mat类的初始化操作
M.create(4,4,CV_8UC(2));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值