opencv mat用法赋值克隆的操作和一些基本属性

//Mat基本结构  (头部  数据部分)
//赋值的话 就是修改了指针位置  但还是指向了原来数据 并没创建数据  本质上并没有变
//只有克隆或者拷贝时  它才会真正复制一份数据

//代码实现
//创建方法 - 克隆
//Mat m1 = src.clone();

//复制
//Mat m2;
//src.copyTo(m2);

//赋值法    修改了指针位置 
//Mat m3=src;

//创建空白图像   方法
//Mat m4 = Mat::zeros(src.size(), src.type());
//Mat m5 = Mat::zeros(size(512,512),CV_8UC3);
//Mat m6 = Mat::zeros(size(512,512),CV_8UC3);

//Mat kernel=(Mat_(3,3)<<0,-1,0,
//-1,5,-1,
//0, -1, 0);

Mat m3 = Mat::zeros(Size(8, 8), CV_8UC1); 

opencv mat用法赋值克隆的操作和一些基本属性_第1张图片

Mat m3 = Mat::zeros(Size(8, 8), CV_8UC3);// CV_8UC1是类型
    //cv_8uc1正是这些灰度值的基本数据类型之一,其中8表示数据量为8位,
    //即1字节;u表示无符号类型;c表示char类型,即字符型;1表示每个像素只有1个色道,即灰度值。

opencv mat用法赋值克隆的操作和一些基本属性_第2张图片 

 std::cout << "width:" << m3.cols << "高度" << m3.rows 
    <<"channels通道数"<

opencv mat用法赋值克隆的操作和一些基本属性_第3张图片 

opencv mat用法赋值克隆的操作和一些基本属性_第4张图片 修改为ones                  结果如下

opencv mat用法赋值克隆的操作和一些基本属性_第5张图片

 将数字改成3   输出结果变为1 0 0 1 0 0 1 0 0 1 0 0.........

opencv mat用法赋值克隆的操作和一些基本属性_第6张图片

好,把ones改回来,此时,若是想给通道数值赋值

//赋值
    m3 = Scalar(127, 127, 127); 

opencv mat用法赋值克隆的操作和一些基本属性_第7张图片 

opencv mat用法赋值克隆的操作和一些基本属性_第8张图片

还可以创建成图片  代码修改为       Mat::zeros一定要有

opencv mat用法赋值克隆的操作和一些基本属性_第9张图片 结果为

opencv mat用法赋值克隆的操作和一些基本属性_第10张图片

增加代码

Mat m4 = m3;//赋值法    修改了指针位置 
 m4= Scalar(0, 255, 255);
 imshow("图像", m3);//输出图像 

注意看   输出的是m3,所以证明赋值法改变了指针位置

若代码为这样:

Mat m4 = m3.clone();
 m4= Scalar(0, 255, 255);
 imshow("图像3", m3);//输出原来m3蓝色图像 

imshow("图像4", m4);//输出为黄色

 Mat m4 = m3;//赋值法    修改了指针位置opencv mat用法赋值克隆的操作和一些基本属性_第11张图片

你可能感兴趣的:(50,计算机视觉,人工智能)