1. 程式人生 > >OpenCV中Mat的基本用法:建立、複製

OpenCV中Mat的基本用法:建立、複製

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