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

来源:互联网 发布:数据分析职业发展 编辑:程序博客网 时间:2024/05/16 04:40
关于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_是一个矩阵模板。



            
              
      
      
0 0
原创粉丝点击