Mat,再也不须要手动分配其内存并在不须要时当即释放它。大多数OpenCV函数都会自动分配其输出数据。
ios
Mat基本上是一个包含两个数据部分的类:矩阵头(包含诸如矩阵大小,用于存储的方法,存储矩阵的地址等信息)和指向包含矩阵的矩阵的指针。像素值(取决于选择存储的方法取任何维度)。矩阵标题大小是恒定的,可是矩阵自己的大小可能因图像而异,而且一般大于数量级。函数
#include <opencv2/opencv.hpp>spa
#include <iostream>指针
using namespace cv;内存
using namespace std;input
int main(int artc, char** argv) {it
Mat src = imread("D:/test.png");io
if (src.empty()) {opencv
printf("could not load image...\n");test
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;
}