下面是示例代码:
void demo::tuxiang_creation()
{
Mat m3 = Mat::ones(Size(400, 400), CV_8UC3);
//std::cout << "width " << m3.cols << "height " << m3.rows << "channels " << m3.channels() << std::endl;
m3 = Scalar(0,255,0);
//std::cout << m3 << std::endl;
//imshow("创建图像", m3);
//Mat m4 = m3;
Mat m4;
m4=m3.clone();
m4 = Scalar(255, 0, 0);
imshow("图像", m3);
imshow("图像4", m4);
}
在opencv里面基本的计算单元是矩阵,用Mat作为前缀就可以定义矩阵了,在C++里面最重要的概念就是类的概念,我们可以把Mat看成是一个矩阵类,在类里面包含了对类的一些基本操作,而ones(图像大小,通道类型),就是这样的一个操作,它创建一个像素点为400x400,三通道的图像,把返回值赋值给m3。
std::cout << "width " << m3.cols << "height " << m3.rows << "channels " << m3.channels() << std::endl;
//输出矩阵的行长,列长,元素长度
结果如下:
给矩阵赋值,如果直接给矩阵赋值,例如m3=255,则只是给m3元素的第一个值赋值为255,元素其余部分不变,
m3 = 255;
std::cout << m3 << std::endl;
Mat m4=m3;
m4与m3共用一份数据,m4改变时,m3也同时改变,同理,m3改变,m4也会改变,像是C++里面引用的概念。
还有一点是今天才发现的,就是imshow()这个函数如果创建的窗口名字相同的话,他是只会显示一个窗口的,后一个窗口会覆盖前一个窗口。
over!!!