您的位置:首页 > 运维架构

Opencv学习笔记(五):关于OpenCV2中的Mat图像容器

2013-12-17 21:10 465 查看
关于OpenCV2中的Mat图像容器
Last Edit 2013/12/17
看过OpenCV2写的代码,才知道用OpenCV1写代码是多么麻烦的事~~~

1、为什么要用Mat容器?
还记得在OpenCV1中怎么去申请一个创建一个图像空间么,IPlimage*指针么,程序最后还要记得释放内存空间,一下小心就内在泄漏了。而C++接口中的Mat能够自动申请和释放空间。Mat的不同的对象可以共同使用同一个图像数据,也就是说每个Mat对象的header不同,但它们共对指向同一个data matrix,使用计数机制来管理。

2 、Mat的使用方式

1) Mat A,C;
Mat B(A); C=A,这样当A或者B,C改变时,A,B,C的数据都会同时改变。
为此,当我们不想要这样的结果产生时,我们可以使用拷贝的方法,来使得数据不同时发生改变。
Mat F=A.clone();
Mat G;
A.copyTo(G);

2)还可以用一个矩阵的部分行,列数据去构造一个新的矩阵
Mat D(A,rect(10,10,100,100));
Mat E=A(range:all(),range(1,3));
Mat E=A(range(1,2),range(1,3));

3) Mat的构造函数
Mat M(2,2,CV_8UC3,Scalar(0,0,123)); //生成一个2*2的,3通道的矩阵,值为(0,0,123)
cout<<"M="<<M<<endl; //可以直接使用<<来输出其中的值



4) Mat使用create()函数
Mat M;
M.create(4,4,CV_8UC3);

3、Mat构造的几个特殊矩阵
Mat M=Mat::ones(4,4,CV_32F);



Mat M=Mat::eye(4,4,CV_32F);



Mat M=Mat::zeros(4,4,CV_32F);



4、初始化一个矩阵
Mat M=(Mat_<double>(3,3)<<1,2,3,4,5,6,7,8,9)

Mat_是一个矩阵模板。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: