opencv学习记录——(3)图像对象的创建与赋值

介绍了如何创建一个Mat对象,通过创建新的Mat对象来创建用户的特定的底色画布,创建图像的基本类型有两种一种是ones(1矩阵)一种是zeros(0矩阵),ones()中的第一个参数代表图像的大小,第二个参数代表创建几维的图像,UC代表无符号字符型,数组3代表通道数。clone、copyto和赋值的区别,clone和copyto就是产生一个新的对象,新对象改变属性,旧对象属性不变(各自独立)。赋值是二者同体,当新属性发生改变,旧属性也发生改变(二者同体)。

​
void QuickDemo::matcreationdemo(Mat& image)
{
//  创建空白图像
	Mat m3 = Mat::ones(Size(400, 400), CV_8UC3);// CV_8UC1 中 8代表8位 UC代表无符号 1代表1个通道 size(8,8)代表8*8矩阵
	m3 = Scalar(0, 0, 255);//
	cout << "width(宽):" << m3.cols << "hight(高)" << m3.rows << "channels(通道数)" << m3.channels() << endl;
	cout << m3 << endl;//在控制台中输出m3
	imshow("创建图像", m3);
	下面是=赋值用法
	*Mat m4 = m3;
	m4 = Scalar(0, 255, 255);
	imshow("等号赋值图像4", m4);
	imshow("原始图像3", m3);   //等号赋值,m3与m4公用一个数据区,修改其中一个,另一个会做相同的变化
	
	//下面是clone用法
	Mat m5 = m3.clone();
	m5= Scalar(255, 0, 255);
	imshow("原始图像3", m3);
	imshow("clone图像5", m5); //clone类,原图(m3)与clone的图(m6)有各自的数据区,修改clone的图(m6)对原图无影响;
	//下面是copyto()
	Mat m6;
	m3.copyTo(m6);
	m6 = Scalar(255, 0, 0);
	imshow("copyto图像6", m6);
	imshow("原始图像3", m3);//copyto类,原图(m3)与copy的图(m6)有各自的数据区,修改copy的图(m6)对原图无影响;
}

一、Mat中对clone()、copyto()、等号赋值的解释

(1)等号赋值类

例如:Mat image1=image; 将image赋值给image1, 其中image和image1共享数据区,若后续对image1,进行改变,image也会跟着做相同的变化;

(2)clone()类

Mat image1 = image.clone() ;//完全拷贝,把image中的所有信息拷贝到image1中 ,image和image1各自有独立的数据区,即使改变image1,image也不会发生改变,会维持原状。

(3)copyto()类

image.copyTo(image1) ;//拷贝image的数据区到image1中,与clone基本一致。

二、创建空白图像

Mat m3 = Mat::ones(Size(400, 400), CV_8UC1);

 CV_8UC1 中 8代表8位 UC代表无符号类型 1代表1个通道,数字几就代表几个通道, size(8,8)代表8*8矩阵。

(1)zeros代表0,ones代表1  
 在Mat::zeros(Size(8, 8), CV_8UC1) 单通道的8*8全部为0的矩阵
在Mat::ones(Size(8, 8), CV_8UC1) 单通道的8*8全部为0的矩阵
(2)需要注意三通道 ones的情况
在Mat::ones(Size(8, 8), CV_8UC3)   三通道中情况中,只有每个通道的第一列为1,其余全部是0;
三通道 :
例如 : 每三列为一个通道 1 0 0  1 0 0  1 0 0  1 0 0  1 0 0  1 0 0  1 0 0
                                           1 0 0  1 0 0  1 0 0  1 0 0  1 0 0  1 0 0  1 0 0
m3 = Scalar(253, 254, 255);代表将三通道里每个通道中的三列元素分别设置为253,254,255
                         253 254 255  253 254 255  253 254 255  253 254 255  253 254 255  
                         253 254 255  253 254 255  253 254 255  253 254 255  253 254 255 

设置单通道中的数值方法: m3 = 127; 这样单通道中所有值均为127

你可能感兴趣的:(c++)