当前位置:网站首页>图形对象的创建与赋值

图形对象的创建与赋值

2022-07-07 10:33:00 什么时候上岸?

  下面是示例代码:

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!!! 

原网站

版权声明
本文为[什么时候上岸?]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_58752235/article/details/125612292