OpenCV中Mat操作clone() 与copyto()的区别

Mat深拷贝与浅拷贝 clone()会将矩阵的所有信息(包括头部和数据部分)都拷贝到目标矩阵中,也就是说并不会共享数据。 coyTo()会将矩阵的数据部分拷贝到目的矩阵,且在拷贝之前会调用creat()函数。 Mat clone() const; void copyTo( OutputArray m ) const; void copyTo( OutputArray m, InputArray mask) con... 阅读详情
// Mat is basically a class with two data parts: the matrix header and 
//a pointer to the matrix containing the pixel values 

#include <iostream>
#include <highgui.h>

using namespace std ;
using namespace cv ;

int main()
{
	Mat image = imread("1.png" , 0) ;
	
	//Mat image1(image) ;//仅是创建了Mat的头部分,image1与image共享数据区
	//Mat image1 = image ;//仅是创建了Mat的头部分,image1与image共享数据区
	//Mat image1 = image.clone() ;//完全拷贝,把image中的所有信息拷贝到image1中
	Mat image1 ;
	image.copyTo(image1) ;//拷贝image的数据区到image1中,在拷贝数据前会有一步:image1.create(this->size , this->type)
	for(int h = 0 ; h < image1.rows ; ++ h)
	{
		uchar* ptr = image1.ptr(h) ;
		for(int w = 0 ; w < image1.cols ; ++ w)
		{
			ptr[w] = 0 ;
		}
	}
	imshow("image" , image) ;
	imshow("image1" , image1) ;
	waitKey() ;
	return 0 ;
}


Mat-深拷贝函数 之前谈到过Mat的拷贝构造函数和以Mat为形参的赋值运算符都是在执行浅拷贝的操作,因为在拷贝或者赋值的时候只是重新开辟内存存储了信息头,而矩阵头的内容仍然是共享的。既然有浅拷贝那么就应该有深拷贝。下面介绍两个实现深拷贝的函数[1]和[2]的实现://! returns deep copy of the matrix, i.e. the data is copied [1]Mat clone( 阅读详情

相关推荐

OpenCV学习C++接口 Mat像素遍历详解

IplImage 学习总结:

chen 1万+

QImage与Mat相互变换

//##### cv::Mat ---&gt; QImage #####QImage cvMat_to_QImage(const cv::Mat &amp;mat ) {  switch ( mat.type() )  {     // 8-bit, 4 channel     case CV_8UC4:     {        QImage image( mat.data, mat.cols,...

DJAlove的博客 508

opencv和cv::Mat常用属性和函数

这篇文章包括: 1. opencv常用头文件及作用 2. cv::Mat常见初始化 3. cv::Mat常见属性 4. cv::Mat常见函数   clone()和copyTo()的区别 5.cv::Mat的RGB赋值(改颜色) 6.待续   1. opencv常用头文件: 1.1 最常用头文件: #include <opencv2/core/core.hpp> #incl...

踏雪飞鸿的博客 4989

opencv之图像mat复制copyTo,clone=

函数原型 Mat clone() const; void copyTo( OutputArray m ) const; void copyTo( OutputArray m, InputArray mask) const; copyTo()有重载, 对于你说的imge.clone()和imge.copyTo(result)这种情况,源码解释如下 inline Mat Mat::clon

小木匠的博客 4万+

OpenCV4学习笔记(1)——图像读取、复制和创建

开篇:作为一名光电信息科学与工程的在读大三学生,我选择了光电视觉方向,又对于图像处理方向感兴趣,所以开始了学习OpenCV的漫漫长路。因为疫情在家呆着,就来整理一下平时学习的笔记注释,借助优快云这个平台记录下我的学习日常,也有利于以后回顾知识点的方便。学习OpenCV其实有一段时间了,但是之前都是很零散的学习,而且是以python为主要学习语言,没有形成完整的知识体系,所以从上个月开始,我加入了...

邱小兵的博客 1601

Snort源代码编译 _ 采坑之旅(for Windows VS2015)

    系统环境:Windows7 sp1 x64     编译环境:VS2015 SP1     Snort版本:2.9.12     daq版本:2.0.6     Snort官网:https://www.snort.org/downloads#snort-downloads 背景     最近需要实现一个类似网络防火墙的产品,主要参考Snort源码,先花了点时间简单读了下网上比较流行的《...

magictong的专栏 8891

c语言cione图像库,c – 使用OpenCV的imread()从qrc中读取图像

正如@TheDarkKnight指出的那样,imread并不知道Qt资源.但是,您可以编写自己的加载器,使用QFile从资源中检索二进制数据,并使用imdecode(由imread内部完成)来读取图像:Mat loadFromQrc(QString qrc,int flag = IMREAD_COLOR){//double tic = double(getTickCount());QFile fi...

weixin_39669133的博客 234

STM32CubeMX定时器进阶玩法:用编码器模式实现电机转速测量(附避坑清单)

本文详细介绍了如何使用STM32CubeMX配置定时器的编码器模式实现电机转速测量,包括硬件连接、CubeMX配置关键步骤、转速计算算法及常见问题解决方案。特别针对工业控制和机器人开发中的高精度需求,提供了实用的避坑清单和优化技巧,帮助开发者高效完成项目。

joy55的博客 203

OpenCV中Mat操作“ =“ 、clone() 与copyto()的区别

1、“=” 浅拷贝 浅拷贝 - 不复制数据只创建矩阵头,数据共享(更改a,b,c的任意一个都会对另外2个产生同样的作用) Mat a = imread("1.jpg"); Mat b = a; //a "copy" to b Mat c(a); //a "copy" to c a.col(10)=0;//把a的第十列全置0,b和c也相应发生变化 2、"clone()" 完全深拷贝 clone 是完全的深拷贝,在内存中申请新的空间 Mat A = Mat::ones(4,5,CV_32..

my_angle2016的博客 2094

自动驾驶小车DIY:树莓派+激光雷达实现DWA路径规划(从仿真到实车)

本文详细介绍了如何基于树莓派与激光雷达,从零搭建一套完整的自动驾驶小车系统,并实现DWA局部路径规划算法。内容涵盖硬件选型、ROS环境部署、DWA算法原理与仿真,以及关键的实车调试与性能优化技巧,为创客和竞赛爱好者提供了一套低成本、高可行性的自主导航解决方案。

kiwi8的博客 530

利用AWVS进行反制

awvs 10.5下载 http://www.32r.com/soft/12986.html

渗透之路,攻防之间皆学问 6654

OpenCV中图像Mat常用的浅拷贝和深拷贝操作和区别传值、传引用、clone()、copyto()

在OpenCV中,Mat类使用非常广泛,对于Mat容器的拷贝方式将对程序运行效率产生很大的影响,在Mat中效率最高的浅拷贝,效率较低的是深拷贝。 1.什么是深拷贝和浅拷贝? 深拷贝:将数据拷贝到一段新的内存中,源数据和拷贝之后的数据在内存中相互独立,改变任何一个都不影响另外一个。 浅拷贝:浅拷贝只是将要拷贝数据的地址拷贝到一个新的Mat中,源数据和拷贝后的数据同一段内存中的数据,只要对应内存中的数...

一点儿也不萌的萌萌 2894

【WRFDA运行第五期】运行 OBSGRID 客观分析

运行 OBSGRID 客观分析

WW、forever的博客 1051

OpenCV = clone()、copyto()的区别及 Mat的浅层拷贝与深层拷贝

1. OpenCV中的clone()和直接赋值(=)都会导致共享数据区,也就是相当于C++的引用(&),使用copy,才会获取新的Mat。及具有相同的type和size的Mat变量,copyTo和直接赋值(=)不会为目标矩阵重新分配内存,而clone总是会为目标矩阵重新分配内存。 Mat image1(image) ;//仅是创建了Mat的头部分,image1与image共享...

紫蝶侠的博客 4009

【四足机器人项目实战】四足机器人运动学、动力学模型

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、四足机器人实际模型的物理难点二、四足机器人运动学模型1.方法一:DH法建立运动学模型(1)运动学建模构型方法(2)运动学模型描述方法1、基于DH法四足机器人单腿运动学模型公式推导(0)DH法科普1)原理2)实现过程3)评价(1)四足机器人的建模规则、坐标系定义及实物参数确定1)标准Denavit-Hartenberg法建模规则2)单腿运动学模型坐标系定义示意图及简化模型3)

qq_35635374的博客 1万+

第六天 界面操作及美化(6.4 使用GUI 套件)

本文介绍如何使用VIPM工具安装DMC GUI套件:首先打开VIPM并连接网络,搜索"UI"找到DMCGUI套件后下载安装;安装完成后即可在VIPM中添加控件并预览效果。该方法同样适用于下载其他UI套件,用户可根据需求设计个性化界面。整个流程包括搜索、下载、安装和使用四个简单步骤,适合快速搭建GUI界面。

weixin_38637405的博客 407

OpenCV之Mat的详细介绍

在opencv中,Mat作为图像的存储容器,是非常基础也是非常重要的知识,本文主要介绍Mat相关的操作。 1 图像复制 再开始将拷贝之前,先给大家分享一下浅拷贝和深拷贝 浅拷贝:拷贝对象和被拷贝对象都指向同一个内存空间,修改任何一个对象的数据都会影响另外一个; 举个例子:小明和小红在沙漠中共用一个水瓶喝水,任何一个人喝了水,另外一个人都会剩下更少的水。 深拷贝:拷贝对象和被拷贝对象指向不同的内容空间,修改数据时互不影响。 举个例子:小明和小红各有一个水瓶,各自喝各自的水对对方不影响。 深拷贝和浅拷贝都各有优

PRML_MAN的博客 1万+

数据仓库数据质量监控和处理方法最佳实践

指的是检查数据是否存在反常或者错误的情况,例如数值反常地过大或者过小,或者超过记录的波动值,对应的规则包括数值波动检查,最大值、最小值检查,跨表准确性等。指的是检查数据是否存在缺失的情况,这里的缺失可以是整个数据集的记录缺失,也可以是某个字段记录的缺失,对应的规则包括空值检查,表总行数检查。指的是检查数据是否符合规范,是否按照规定的格式存储,对应的规则包括正则表达式检查,字段长度检查,枚举集合检查,数值范围等。指的是检查哪些数据是重复数据或者数据的哪些属性是重复的,对应的规则例如主键唯一性检查。

大模型大数据攻城狮的专栏 899

C++ opencv之图像对象的创建与赋值

文章目录一、引入二、克隆与拷贝三、创建图像 一、引入 首先我们来看一下Mat 的基本结构 其中数据部分为像素的值的一个集合,头部就是包含图像的一个属性,比如大小、宽高、类型、通道数等等。 在对他进行赋值操作的时候,只是相当于把内存的指针重新指向了原来的数据,本质上还是同一个DataBlock,当进行克隆或者拷贝操作的时候,就会把这个Mat中所有的数据复制一份,以供使用。 二、克隆与拷贝 还是跟以前一样,采用多文件调用的方式。声明函数的demo放在quickopencv.h文件里,实现放在quickdemo

weixin_46196863的博客 4130

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Opencv3 core模块解析之Mat类(1)

在阅读opencv文档和源码时,常常看到InputArray、OutputArray、UMat、Mat_等“奇怪”的类,与我们常用的Mat,好像一样又不完全一样,这些其实主要在opencv内部用,其中有些文档都很少甚至没有,在opencv外部程序还是Mat主打。另外还有Mat的成员create(),copyTo(),clone(),data,empty()等,到底有哪些使用中的注意事项。本文通过源码解析一下。

yyyu200的专栏 4981

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

mat 释放_[转]OpenCv2 学习笔记(1) Mat创建、复制、释放

OpenCV和VS2013的安装图文教程网上有很多,建议安装好之后,用VS2013建立一个空工程,用属性管理器分别新建一个对应debug和release工程的props配置文件,以后直接根据工程需要添加对应配置文件,而不需要每次新建工程后填写引用目录、库目录、附加依赖项,减少重复工作。(用WLW编辑,段间距有点大!)需要说明的是,本学习笔记不会按照先讲数据结构,再讲如何使用。与OpenCv1.x不...

weixin_34997006的博客 1063

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

openCV中Mat对象的使用

OpenCv提供了Mat类用来存储矩阵类型数据,包括向量、矩阵、图像等数据。Mat类分为分为矩阵头和指向存储数据的矩阵指针两部分。矩阵头包含矩阵的尺寸、存储方法、地址和引用次数。矩阵头是一个常数,绝大数情况下,矩阵头的大小远小于矩阵数据量的大小。

weixin_46269422的博客 387

Opencv -- 003 Mat对象的创建与赋值

1、一个Mat对象(图片)包含头部和数据部分两部分信息。 2、当使用赋值方式时,并不会重新开辟一块空间来存储这张图片的信息。Mat还有一个克隆/拷贝方法,当调用这两个方法时,才会将另外开辟一块空间来存储这张图片的信息。 如何调用拷贝和克隆方法。 void QuickDemo::mat_creation_demo(Mat& image) { Mat m1,m2; //克隆方法 m1 = image.clone(); //拷贝方法 image.copyTo(m2); } 如何创建空白图像..

xuechanba的博客 2506

OpenCV 图像复制和图像区域读写

图像复制 共享数据, 使用 new Mat(srcMat, ...) 和 newMat=srcMat 生成新的Mat都和原Mat共享数据, 也就是说如果修改某一Mat,其他Mat也会随之改变 复制全新的Mat, 使用CopyTo() 和 Clone() 方法将生成一个全新的Mat, 新Mat和原Mat不共享数据. 图像区域和点的读写 区域读取: 通过srcMat[Rect] 读取指定区域...

诸葛建站 360
上一篇: 可变参数函数的使用:va_start() , va_end() , va_list
下一篇: C++格式化输出
知行且执行
博客等级 码龄14年 38粉丝 73原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值