一、创建空白图像
Mat m3 = Mat::zeros(Size(8, 8), CV_8UC3);
std::cout << "width" << m3.cols << "\n" << "height:" << m3.rows << "\n" << "channels:" << m3.channels() << std::endl;
std::cout <<"m3图像的像素输出"<<"\n" << m3 << std::endl;
Size()表示二维图像的宽与高;
CV_8UC3表示一个像素有3个通道,而每个通道的每个像素占8bit的内存;
输出结果如下:
二、创建一个ones图像
Mat m4 = Mat::ones(Size(8, 8), CV_8UC3);
std::cout << "m4图像的像素点输出"<<"\n" << m4 << std::endl;
输出结果如下:
可以看出除了第一个通道为1,其他通道皆为0,要对其余通道进行修改,需进行赋值操作
三、通道的赋值
运用Scalar函数定义通道的值
Mat m3 = Mat::zeros(Size(8, 8), CV_8UC3);
m3 = Scalar(127,127,127);
结果如下:
四、克隆与赋值
1、克隆与拷贝
//克隆
Mat m5 = m3.clone();
m5 = Scalar(0, 155, 255);
//拷贝
Mat m6;
m3.copyTo(m6);
m6 = Scalar(0, 155, 255);
//展示结果
imshow("m3克隆后", m3);
imshow("m5", m5);
imshow("m6", m6);
结果如下:
可以看出,m5,m6对m3进行了克隆与拷贝,修改其灰度值并不会影响m3。
2、赋值
Mat m7 = m3;
m7 = Scalar(0, 155, 255);
imshow("m3赋值后", m3);
imshow("m7", m7);
将m3赋值给m7,改变m7的通道灰度值,竟然会改变m3的灰度值。此处可以把m7看做一种指针的解引用,此处是修改指针指向的值,而这个指针指向的值就是m3。
五、 创建一个矩阵
Mat kernel = (Mat_<char>(3,3) << 0,-1,0,
-1,5,-1,
0,-1,0 );
std::cout << kernel << std::endl;
输出结果: