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;
}