在opencv中,Mat作为图像的存储容器,是非常基础也是非常重要的知识,本文主要介绍Mat相关的操作。

1 图像复制

再开始将拷贝之前,先给大家分享一下浅拷贝深拷贝
浅拷贝:拷贝对象和被拷贝对象都指向同一个内存空间,修改任何一个对象的数据都会影响另外一个;
举个例子:小明和小红在沙漠中共用一个水瓶喝水,任何一个人喝了水,另外一个人都会剩下更少的水。

深拷贝:拷贝对象和被拷贝对象指向不同的内容空间,修改数据时互不影响。
举个例子:小明和小红各有一个水瓶,各自喝各自的水对对方不影响。

深拷贝和浅拷贝都各有优缺点:

优点 缺点
浅拷贝 拷贝效率高,空间利用率高,无需重新开辟空间 不适用于拷贝和被拷贝对象同时修改的情况
深拷贝 任何一方的修改都不影响另一个 拷贝效率低,占用空间较多,影响性能
1.1 拷贝构造函数进行拷贝

这种拷贝方式属于浅拷贝,下面代码中的img和img2都指向相同的内存空间,修改img或者img2,另外一个中的变量也会跟着变化。

Mat img = imread("test.jpg", CV_LOAD_IMAGE_COLOR);
Mat img2(img); // 拷贝构造函数
1.2 赋值运算符进行拷贝

这种拷贝方式属于浅拷贝,下面代码中的img和img2都指向相同的内存空间,修改img或者img2,另外一个中的变量也会跟着变化。

Mat img = imread("test.jpg", CV_LOAD_IMAGE_COLOR);
Mat img2 = img; // 赋值运算符
1.3 使用Rect截取拷贝

这种拷贝方式属于浅拷贝,下面代码中的img2指向的内存空间为img的子内存空间。

Mat img = imread("test.jpg", CV_LOAD_IMAGE_COLOR);
Mat img2(img, Rect(200,200,300,300));
1.4 使用clone()函数拷贝

这种拷贝方式属于深拷贝,img和img2分别指向不同的内存空间,修改img或img2 的数据,不影响另一个变量。

Mat img = imread("test.jpg", CV_LOAD_IMAGE_COLOR);
Mat img2 = img.clone();
1.5 使用copyTo()函数拷贝

这种拷贝方式属于深拷贝,img和img2分别指向不同的内存空间,修改img或img2 的数据,不影响另一个变量。

Mat img = imread("test.jpg", CV_LOAD_IMAGE_COLOR);
Mat img2;
img.copyTo(img2);

2 创建Mat对象的方法

2.1 构造函数
Mat img(100,100,CV_8UC3, Scalar(255,255,255));
2.2 create()创建对象
Mat img;
img.create(100,100, CV_8UC3);
2.3 zeros(),eye(), ones()创建对象
Mat img = zeros(100,100,CV_8UC3); // 全0矩阵
Mat img1 = eye(100,100,CV_8UC3); // 对角为1的对角矩阵
Mat img2 = ones(100,100,CV_8UC3); // 全1矩阵
2.4 使用逗号数组创建对象
Mat img = (Mat_<double>(2,2) << 0,1,1,0); // 按行填充
2.5 图像复制方法创建对象

请见1 图像复制中的内容

后续有新内容会持续更新。。。。。。

OpenCV之Mat的详细介绍相关推荐

  1. python读取.mat文件,python将变量存为.mat文件详细介绍

    在进行数据处理的过程中,经常会用到Matlab和python两种工具,.mat文件是Matlab数据存储的标准数据格式,通过创建一个.mat文件详细介绍两种工具之间的数据读取和存储. 一.python ...

  2. Opencv中Mat类详细解读(学习笔记)

    基于windows10.vs2015.OpenCv4.1.0. 目录 1.Mat类简介 2.Mat类的构造与赋值 2.1.Mat类的构造 2.2.Mat类的赋值 3.Mat类支持的运算 3.1Mat类 ...

  3. 在ROS下利用OpenCV的Mat类,将激光点云展开为深度图像(从零开始,超详细)

    激光雷达3D目标检测任务需要将地面滤除,滤除地面的方法多种多样:基于深度学习.基于栅格.基于平面拟合.基于条件随机场.基于深度图像等等.关于将点云转化为深度图像,PCL库中有相关函数,但使用起来有一定 ...

  4. 一、opencv详细介绍

    一.opencv详细介绍 文章目录 一.opencv详细介绍 1.1 什么是opencv 1.2 opencv历史 1.3 为什么用OpenCV 1.4 opencv的应用场景 1.图像分类 2.目标 ...

  5. android都图片mat_计算机视觉 OpenCV Android | Mat像素操作(图像像素的读写、均值方差、算术、逻辑等运算、权重叠加、归一化等操作)...

    本文目录 1. 像素读写 2. 图像通道与均值方差计算 3. 算术操作与调整图像的亮度和对比度 4. 基于权重的图像叠加 5. Mat的其他各种像素操作 1. 像素读写 Mat作为图像容器,其数据部分 ...

  6. OpenCV之Mat与Bitmap之间的转换

    我们想在Android平台上开发OPenCV(处理图像):避免不了显示,通常在Android当中展示图像都是通过ImageView这个控件,当然展示的方式也有几种,在下面的内容中会简单介绍一下.但是我 ...

  7. 图片服务 - thumbor详细介绍

    图片服务 - thumbor详细介绍 什么是thumbor? Thumbor是一种智能成像服务.它支持按需裁剪,调整大小和翻转图像. 它具有非常智能的图像重要点检测功能,可以使用最先进的人脸和特征检测 ...

  8. 从 RGB 到 HSV 的转换详细介绍

    从RGB 到 HSV 的转换详细介绍 1.RGB RGB是从颜色发光的原理来设计定的,通俗点说它的颜色混合方式就好像有红.绿.蓝三盏灯,当它们的光相互叠合的时候,色彩相混,而亮度却等于两者亮度之总和, ...

  9. opencv的mat赋值_OpenCV Mat 类型定义和赋值

    1.一般的Mat定义方法:cv::Mat M(height,width,),例: cv::Mat M(480,640,CV_8UC3); 表示定义了一个480行640列的矩阵,矩阵的每个单元的由三个( ...

最新文章

  1. linux 存储映射lun 给_如何在 Linux 上扫描/检测新的 LUN 和 SCSI 磁盘 | Linux 中国
  2. 安卓天天练练(十一)用list绑数据
  3. 数组之间的计算matlab,MATLAB软件数组的运算
  4. 第十五周学习进度博客
  5. 关于arcgis发布wfs问题
  6. linux查看某进程的连接,linux下查看指定进程的所有连接信息(转)
  7. 易飞扬宣布完成100G CWDM4PSM4光模块量产线建设
  8. Easyui+Spring+Mybatis完整示例(前台)
  9. 【Swin Transformer】W-MSA与MSA时间复杂度的理解
  10. 文章页调用栏目链接和栏目名称的方法
  11. 手把手交给大家怎样破解压缩包密码的方法
  12. 容器化运行wine模拟器制作开源代码索引chm文件
  13. 90后小伙自己开发APP年赚10亿,自己开发APP需要什么工具
  14. 光学中你遇到过哪些问题?
  15. 无为职中计算机专业期中考试高一,无为县襄安高级职业中学
  16. 软件测试自我评价模版,软件测试工程师简历自我评价
  17. Google加速移动页面(AMP)简介
  18. Camera驱动基础--硬件接口相关知识介绍
  19. Python中遍历列表remove漏删解决方案
  20. 很高兴加入 英文_4岁娃英文词汇3000+,我是怎样做到的

热门文章

  1. (一)计算机视觉 --图像处理基础
  2. 黑马程序员C语言基础(第一天)(linux相关操作)
  3. 西雅图秋招来了, 哪家公司给应届生的工资最高?
  4. navicat 12 for mongodb破解教程
  5. 叠幻AR SDK介绍
  6. 10套最全Java项目实战课程(附项目实战+源码)
  7. 传销泛滥地区排行,看看有没有你的家乡!
  8. 面试时如何自我介绍【面试核心问题1】
  9. UniRx 基本使用
  10. 华三交换机配置多个镜像口_H3C交换机配置多个流量镜像观察口