OpenCV之Mat的详细介绍
在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的详细介绍相关推荐
- python读取.mat文件,python将变量存为.mat文件详细介绍
在进行数据处理的过程中,经常会用到Matlab和python两种工具,.mat文件是Matlab数据存储的标准数据格式,通过创建一个.mat文件详细介绍两种工具之间的数据读取和存储. 一.python ...
- Opencv中Mat类详细解读(学习笔记)
基于windows10.vs2015.OpenCv4.1.0. 目录 1.Mat类简介 2.Mat类的构造与赋值 2.1.Mat类的构造 2.2.Mat类的赋值 3.Mat类支持的运算 3.1Mat类 ...
- 在ROS下利用OpenCV的Mat类,将激光点云展开为深度图像(从零开始,超详细)
激光雷达3D目标检测任务需要将地面滤除,滤除地面的方法多种多样:基于深度学习.基于栅格.基于平面拟合.基于条件随机场.基于深度图像等等.关于将点云转化为深度图像,PCL库中有相关函数,但使用起来有一定 ...
- 一、opencv详细介绍
一.opencv详细介绍 文章目录 一.opencv详细介绍 1.1 什么是opencv 1.2 opencv历史 1.3 为什么用OpenCV 1.4 opencv的应用场景 1.图像分类 2.目标 ...
- android都图片mat_计算机视觉 OpenCV Android | Mat像素操作(图像像素的读写、均值方差、算术、逻辑等运算、权重叠加、归一化等操作)...
本文目录 1. 像素读写 2. 图像通道与均值方差计算 3. 算术操作与调整图像的亮度和对比度 4. 基于权重的图像叠加 5. Mat的其他各种像素操作 1. 像素读写 Mat作为图像容器,其数据部分 ...
- OpenCV之Mat与Bitmap之间的转换
我们想在Android平台上开发OPenCV(处理图像):避免不了显示,通常在Android当中展示图像都是通过ImageView这个控件,当然展示的方式也有几种,在下面的内容中会简单介绍一下.但是我 ...
- 图片服务 - thumbor详细介绍
图片服务 - thumbor详细介绍 什么是thumbor? Thumbor是一种智能成像服务.它支持按需裁剪,调整大小和翻转图像. 它具有非常智能的图像重要点检测功能,可以使用最先进的人脸和特征检测 ...
- 从 RGB 到 HSV 的转换详细介绍
从RGB 到 HSV 的转换详细介绍 1.RGB RGB是从颜色发光的原理来设计定的,通俗点说它的颜色混合方式就好像有红.绿.蓝三盏灯,当它们的光相互叠合的时候,色彩相混,而亮度却等于两者亮度之总和, ...
- opencv的mat赋值_OpenCV Mat 类型定义和赋值
1.一般的Mat定义方法:cv::Mat M(height,width,),例: cv::Mat M(480,640,CV_8UC3); 表示定义了一个480行640列的矩阵,矩阵的每个单元的由三个( ...
最新文章
- linux 存储映射lun 给_如何在 Linux 上扫描/检测新的 LUN 和 SCSI 磁盘 | Linux 中国
- 安卓天天练练(十一)用list绑数据
- 数组之间的计算matlab,MATLAB软件数组的运算
- 第十五周学习进度博客
- 关于arcgis发布wfs问题
- linux查看某进程的连接,linux下查看指定进程的所有连接信息(转)
- 易飞扬宣布完成100G CWDM4PSM4光模块量产线建设
- Easyui+Spring+Mybatis完整示例(前台)
- 【Swin Transformer】W-MSA与MSA时间复杂度的理解
- 文章页调用栏目链接和栏目名称的方法
- 手把手交给大家怎样破解压缩包密码的方法
- 容器化运行wine模拟器制作开源代码索引chm文件
- 90后小伙自己开发APP年赚10亿,自己开发APP需要什么工具
- 光学中你遇到过哪些问题?
- 无为职中计算机专业期中考试高一,无为县襄安高级职业中学
- 软件测试自我评价模版,软件测试工程师简历自我评价
- Google加速移动页面(AMP)简介
- Camera驱动基础--硬件接口相关知识介绍
- Python中遍历列表remove漏删解决方案
- 很高兴加入 英文_4岁娃英文词汇3000+,我是怎样做到的