OpenCV学习:Mat类

来源:互联网 发布:淘宝运费险退货赚钱 编辑:程序博客网 时间:2024/04/30 12:48

Mat是一个类,由两个数据部分组成:矩阵头和一个指向存储所有像素值的矩阵的指针

矩阵头:包含矩阵尺寸,存储方法,存储地址等信息;

像素值矩阵:根据所选存储方法的不同矩阵可以是不同的维数;

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

拷贝构造函数则 只拷贝信息头和矩阵指针,而不拷贝矩阵。

Mat A, C;                                 // 只创建信息头部分A = imread(argv[1], CV_LOAD_IMAGE_COLOR); // 这里为矩阵开辟内存Mat B(A);                                 // 使用拷贝构造函数C = A;                                    // 赋值运算符

创建只引用部分数据的信息头

e.g.创建一个感兴趣区域(ROI)

Mat D (A, Rect(10, 10, 100, 100) ); // using a rectangleMat E = A(Range:all(), Range(1,3)); // using row and column boundaries

拷贝矩阵本身,使用clone()或copyTo()函数,
Mat F = A.clone();Mat G;A.copyTo(G);

改变A、B、C会影响Mat信息头所指向的矩阵,改变F、G不影响


OpenCV函数中输出图像的内存分配是自动完成的(如果不特别指定的话)。
使用OpenCV的C++接口时不需要考虑内存释放问题。
赋值运算符和拷贝构造函数( ctor )只拷贝信息头。
使用函数 clone() 或者 copyTo() 来拷贝一副图像的矩阵。
0 0
原创粉丝点击