opencv的Mat类

来源:互联网 发布:淘宝客服欢迎用语 编辑:程序博客网 时间:2024/05/21 15:47

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));
原创粉丝点击