OpenCV中Mat的基本用法:建立、複製
阿新 • • 發佈:2020-03-11
OpenCV中Mat的基本用法:建立、複製
一、Mat類的建立:
1.方法一:
通過讀入一張影象,直接將其轉換成Mat物件。
1 Mat image = imread("test.jpg"); 2 3 Mat image = imread("F:\\test.jpg");
其中,imread()方法需要傳入String型別的值,一般都是影象檔案路徑。
注意:影象檔案路徑中需要兩個“\”,要不然會報錯。
2.方法二:
使用無引數建構函式,建立Mat物件。
1 Mat image = Mat(); 2 image.create(4, 4, CV_8UC3);//建立一個4x4大小的畫素塊,每個畫素都是三通道每個通道的位數都是8位
上述CV_8UC3中的8表示8位,UC表示uchar型別,3表示三個通道。
3.方法三:
使用帶行、列、型別這個三個引數的建構函式建立Mat物件。
1 Mat m = Mat(4, 4, CV_8UC3); //建立一個4x4大小的畫素塊,每個畫素都是三通道每個通道的位數都是8位
與方法二建立的畫素塊一樣。
4.方法四:
使用行、列、型別、Scalar向量四個引數的建構函式建立Mat物件。
1 Mat m = Mat(4, 4, CV_8UC3, Scalar(0, 255, 255); 2 //建立一個4x4大小的畫素塊,每個畫素都是三通道每個通道的位數都是8位,指定三通道顏色值向量Scalar(0, 255, 255)
同樣表示建立一個4x4的畫素塊,唯一的區別是顏色不是預設值,而是我們指定的三通道顏色值向量Scalar(0, 255, 255)。其中Scalar向量數目永遠是等於通道數目。
5.方法五:
使用大小、型別兩個引數的建構函式建立Mat物件。
1 Mat m = Mat(Size(4, 4), CV_8UC3); //建立一個4x4大小的畫素塊,每個畫素都是三通道每個通道的位數都是8位
6.方法六:
使用大小、型別、Scalar向量三個引數的建構函式建立Mat物件。
1 Mat m = Mat(Size(4, 4), CV_8UC3, Scalar(255, 0, 0)); //建立一個4x4大小的畫素塊,每個畫素都是三通道每個通道的位數都是8位
7.方法七:
使用Mat::zeros函式實現,兩個引數的含義:Size表示影象寬與高,另外一個表示型別。
1 Mat m = Mat::zeros(Size(4,4), CV_8UC3); //建立一個4x4大小的畫素塊,每個畫素都是三通道每個通道的位數都是8位
8.方法八:
使用Mat::ones函式實現,兩個引數的含義:Size表示影象寬與高,另外一個表示型別。
1 Mat m = Mat::ones(Size(4,4), CV_8UC1); //建立一個4x4大小的畫素塊,每個畫素都是三通道每個通道的位數都是8位
注意:這次型別是CV_8UC1表示建立的是一個通道型別資料。
二、Mat類的複製:
1.方法一:
1 Mat m2; 2 Mat m1 = imread("test.jpg"); 3 m2 = m1;
2.方法二:
1 Mat m1 = imread("test.jpg"); 2 Mat m2(m1);
3.方法三:
1 Mat src = imread("test.jpg"); 2 Mat dst = src.clone();
4.方法四:
1 Mat src = imread("test.jpg"); 2 Mat dst; 3 src.copyTo(dst);
特別注意:方法一與方法二的Mat物件只會複製頭部分和指向畫素資料的指標,不會真正複製資料部分。方法三與方法四的Mat可以實現資料物件的完全複製。
&n