Mat類的創建:
方法一:
通過讀入一張圖像,直接轉換為Mat對象
Mat image = imread("test.jpg");
其中 imread()方法需要傳入String類型的值,一般都是圖像文件路徑。
方法二:
使用無參數構造函數,創建Mat對象
Mat image = Mat();
image.create(4, 4, CV_8UC3);
此刻表示創建一個4x4大小的像素塊,每個像素都是三通道每個通道的位數都是8位,一個字節的。上述CV_8UC3中的8表示8位、UC表示uchar類型、3表示三個通道。
方法三:
使用行、列、類型帶這個三個參數的構造函數創建Mat對象
Mat m = Mat(4, 4, CV_8UC3)
表示創建一個跟方法二一樣的像素塊
方法四:
使用行、列、類型、Scalar向量四個參數的構造函數創建Mat對象
Mat m = Mat(4, 4, CV_8UC3, Scalar(0, 255, 255);
同樣表示創建一個4x4的像素塊,唯一不一樣的是顏色不是默認值而是我們指定的三通道顏色值向量Scalar(0, 255, 255)。其中Scalar向量數目永遠是等於通道數目
方法五:
使用大小、類型兩個參數的構造函數創建Mat對象
Mat m = Mat(Size(4, 4), CV_8UC3);
同樣創建一個4x4的每個通道8位三個通道的像素塊
方法六:
使用大小、類型、Scalar向量三個參數的構造函數創建Mat對象
Mat m = Mat(Size(4, 4), CV_8UC3, Scalar(255, 0, 0));
同樣創建一個4x4的每個通道8位三個通道的像素塊
方法七:
使用Mat::zeros函數實現,兩個參數一個是Size表示圖像寬與高
另外一個表示類型:
Mat m = Mat::zeros(Size(4,4), CV_8UC3);
同樣創建一個4x4的每個通道8位三個通道的像素塊
方法八:
使用Mat::ones函數實現,兩個參數一個是Size表示圖像寬與高,
另外一個表示類型
Mat m = Mat::ones(Size(4,4), CV_8UC1);
同樣創建一個4x4的每個通道8位一個通道的像素塊
注意這次類型是CV_8UC1表示創建的是一個通道類型數據。
Mat類的復制:
方法一:
Mat m2;
Mat m1 = imread("test.jpg");
m2 = m1;
方法二:
Mat m1 = imread("test.jpg");
Mat m2(m1);
通過上述兩種方法Mat對象只會復制頭部分和指向像素數據的指針,不會真正復制數據部分。通過如下方法Mat可以實現數據對象的完全復制
方法三:
Mat src = imread("test.jpg");
Mat dst = src.clone();
方法四:
Mat src = imread("test.jpg");
Mat dst;
src.copyTo(dst);





