OpenCVMat的基本用法:创建、复制

一、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)

同样表示创建一个4×4的像素块,唯一的区别是颜色不是默认值,而是我们指定的三通道颜色值向量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可以实现数据对象的完全复制。