Mat对象
头部:属性,大小、宽高、字节类型、通道数……
数据部分:像素值的集合
//创建方法-克隆
Mat m1 = src.clone() //深拷贝
//复制
Mat m2;
src.copyTo(m2); //深拷贝
//赋值法
Mat m3 = src; //浅拷贝,修改src相当于修改m3
void QuickDemo::mat_creation_demo(Mat& image)
{
Mat m1, m2;
m1 = image.clone();
image.copyTo(m2);
//创建空白图像
Mat m3 = Mat::zeros(Size(100, 100), CV_8UC3); //8位,unsigned channel,单/3通道。图像在mat真正宽度是通道数×宽度
//Mat m3 = Mat::ones(Size(8, 8), CV_8UC3); //初始化方法,单通道全为1,三通道只有每个像素起始点为1(每个像素第一通道)
m3 = 127; //每个像素第一通道为1
m3 = Scalar(255, 0, 0); //每个通道都是127
std::cout << "width: " << m3.cols << " height: " << m3.rows << " channels: " << m3.channels() << std::endl; //输出长宽、通道数
std::cout << m3 << std::endl;
/*Mat m4 = m3; //浅拷贝
m4 = Scalar(0, 255, 255);
imshow("m3", m3);*/
Mat m4 = m3.clone(); //深拷贝,或者m3.copyTo(m4)
m4 = Scalar(0, 255, 255);
imshow("m3", m3);
imshow("m4", m4);
}
Mat m = Mat::ones(2, 2, CV_8UC3); 相当于:Mat m = Mat(2, 2, CV_8UC3, 1);
OpenCV replaces 1 with Scalar(1,0,0)相当于每个像素的第一个通道为1,其余两个通道为0;
Mat::zeros() Mat m = Mat::zeros(2, 2, CV_8UC3);
相当于创建一张黑色的图,每个像素的每个通道都为0,Scalar(0,0,0);
Scalar();