Mat,不再需要手动分配其内存并在不需要时立即释放它。大多数OpenCV函数都会自动分配其输出数据。
Mat基本上是一个包含两个数据部分的类:矩阵头(包含诸如矩阵大小,用于存储的方法,存储矩阵的地址等信息)和指向包含矩阵的矩阵的指针。像素值(取决于选择存储的方法取任何维度)。矩阵标题大小是恒定的,但是矩阵本身的大小可能因图像而异,并且通常大于数量级。
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int artc, char** argv) {
Mat src = imread("D:/test.png");
if (src.empty()) {
printf("could not load image... ");
return -1;
}
namedWindow("input", CV_WINDOW_AUTOSIZE);
imshow("input", src);
// 创建方法 - 克隆
Mat m1 = src.clone();//重新分配 一块内存存储
// 复制
Mat m2;
src.copyTo(m2);//重新分配一块内存存储
// 赋值法
Mat m3 = src;//仅复制指向该图像内存的指针,并没有重新分配内存
// 创建空白图像
Mat m4 = Mat::zeros(src.size(), src.type());
Mat m5 = Mat::zeros(Size(512, 512), CV_8UC3);
Mat m6 = Mat::ones(Size(512, 512), CV_8UC3);
Mat kernel = (Mat_<char>(3, 3) << 0, -1, 0,
-1, 5, -1,
0, -1, 0);
waitKey(0);
return 0;
}