Mat 类分为矩阵头和一个指向所有像素值的指针。通过引用计数机制来管理内存释放,每个 Mat 对象有自己的信息头,但共享同一个矩阵。
Mat A, c; // 仅创建信息头部分
A = imread("1.jpg", CV_LOAD_IMAGE_COLOR); // 为矩阵开辟内存
Mat B(A); // 拷贝构造函数
C = A; // 复制运算符
如上,拷贝构造函数值只复制信息头和矩阵指针,而不复制矩阵。
引用部分数据的信息头,如创建一个感兴趣的 ROI,只需要创建包含边界信息的信息头:
Mat D(A, Rect(10, 10, 100, 100)); // 使用矩形界定
Mat E = A(Rect:all(), Range(1, 3); // 用行和列来界定
如何拷贝像素矩阵?用 clone() 或 copyTo()。
Mat F = A.clone();
Mat G =;
A.copyTo(G);
这样不同对象不会相互影响矩阵像素。
参考:
《OpenCV3 编程入门》 毛星云 P87