OpenCV中vector<Mat>数据存储问题

问题:定义数组Mat后,通过指针/取元素对Mat数组数据进行修改,会遇到深浅拷贝问题。
原因是:push_back调用的是Mat的浅拷贝函数来拷贝数据,数据共享。

一、浅拷贝
//注意:浅拷贝 -  不复制数据只创建矩阵头,数据共享(更改a,b,c的任意一个都会对另外2个产生同样的作用)

1.Mat定义矩阵,直接矩阵相等:改变其中一个都会改变。

Mat a;
Mat b = a; //a "copy" to b
Mat c(a);  //a "copy" to c

2.Mat矩阵 更新,然后再push_back 到容器中
vector<Mat> AA;
Mat aa= Mat::zeros(1,3,CV_64FC1); 
 
// 循环1:
aa.at<double>(0,1)=1;
AA.push_back(aa) ;

// 循环2:
aa.at<double>(0,1)=2;
AA.push_back(aa) ;

则AA[0]与 AA[1]是一样的,说明 aa.at<double>(0,1)会覆盖上一次修改的值。

二、深拷贝  
//注意:深拷贝

Mat a;
Mat b = a.clone(); //a copy to b
Mat c;
a.copyTo(c);         //a copy to c 

实例:

#include <iostream>
#include <vector>#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>using namespace std;int main()
{//1.Mat定义矩阵,直接矩阵相等:改变其中一个都会改变。Mat a;a= Mat::zeros(1,3,CV_64FC1); a.at<double>(0,1)=3;cout << "1.Mat a=" << a << endl<<endl;  // Mat b = a; //a "copy" to bMat c(a);  //a "copy" to cb.at<double>(0,1)=4;cout << "2.Mat b=" << b << endl<<endl;  // cout << "2.Mat a=" << a << endl<<endl;  // c.at<double>(0,1)=5;cout << "3.Mat b=" << b << endl<<endl;  // cout << "3.Mat a=" << a << endl<<endl;  //cout << "3.Mat c=" << c << endl<<endl;  //    //2.Mat矩阵 更新,然后再push_back 到容器中vector<Mat> AA;Mat aa= Mat::zeros(1,3,CV_64FC1); for(int i=0; i<3;i++){if (i=0)    // 循环1:{aa.at<double>(0,1)=1;}if (i=1)    // 循环2:{aa.at<double>(0,1)=2;}AA.push_back(aa) ;}cout << "AA容器大小 AA.size()=" << AA.size(); //直接输出AA的长度 for(int j=0; j<3;j++){cout << "AA[j=]"<<j<< "]: " << AA[j] << endl<<endl;  // }// 则AA[0]与 AA[1]是一样的,说明 aa.at<double>(0,1)会覆盖上一次修改的值。cout <<endl;system("pause");return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/217170.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Netty的线程模型】

Netty的线程模型 Netty的线程模型知识拓展单Reactor单线程模型单Reactor多线程模型主从Reactor模型 Netty的线程模型 Netty通过Reactor模型基于多路复用器接收并处理用户请求的&#xff0c;多路复用IO模型参考&#xff1a; 多路复用IO模型: 操作系统的IO模型有哪些&#xff1f…

WindowChrome使用之最大化窗口拖动失败

背景&#xff1a;今天遇到一个奇怪的问题&#xff0c;窗口最大化之后&#xff0c;从屏幕外开始手指移动到窗口标题栏&#xff0c;窗口不跟随手指移动。 对WindowChrome并不是很了解&#xff0c;查了查文档&#xff0c;知道了WindowChrome是什么&#xff0c;怎么使用。 官方文档…

短剧规模达到了百亿元,短剧分销成为短剧新模式

我国短剧市场规模直接突破了三百多亿元&#xff0c;目前已经是互联网的一大创业风口&#xff01; 一、短剧特点 在当下快节奏的生活中&#xff0c;短剧具有的快节奏、剧情紧凑的特点&#xff0c;符合大众对影视的需求。目前我国的短剧题材主要是言情、总裁、赘婿等&#xff0…

Jmeter 测试 MQ 接口怎么做?跟我学秒变大神!

MQ(message queue)消息队列&#xff0c;是基础数据结构 先进先出 的一种典型数据结构。一般用来解决应用解耦&#xff0c;异步消息&#xff0c;流量削锋等问题&#xff0c;实现高性能&#xff0c;高可用&#xff0c;可伸缩和最终一致性架构。 MQ 主要产品包括&#xff1a;Rabb…

基于ssm汽车养护管理系统论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本汽车养护管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息…

WEB渗透—PHP反序列化(一)

Web渗透—PHP反序列化 课程学习分享&#xff08;课程非本人制作&#xff0c;仅提供学习分享&#xff09; 靶场下载地址&#xff1a;GitHub - mcc0624/php_ser_Class: php反序列化靶场课程&#xff0c;基于课程制作的靶场 课程地址&#xff1a;PHP反序列化漏洞学习_哔哩…

npc_test.sh: line 3: $‘\r‘: command not found

[rootlocalhost ~]# bash npc_test.sh npc_test.sh: line 3: $‘\r’: command not found npc_test.sh: line 8: $‘\r’: command not found npc_test.sh: line 10: syntax error near unexpected token $‘{\r’’ pc_test.sh: line 10: 原因&#xff1a; 脚本中出现的错误…

vue3 + ts 防抖指令,节流指令,复制指令

vue3 ts 自定义指令 防抖指令&#xff0c;节流指令&#xff0c;复制指令 本文使用了 element-ui , element-plus 官网 源文件 https://admin.spicyboy.cn/#/directives/debounceDirect 新建 copy.ts 文件 &#xff08;复制指令&#xff09; import type { Directive, Di…

12.6每日一题(备战蓝桥杯程序的控制结构)

12.6每日一题&#xff08;备战蓝桥杯程序的控制结构&#xff09; 题目 1638: 【入门】判断正负数或零题目描述输入输出样例输入样例输出来源/分类 题解 1638: 【入门】判断正负数或零题目 1348: 【入门】求绝对值题目描述输入输出样例输入样例输出来源/分类 题解 1348: 【入门】…

【Qt开发流程】之2D绘图2:坐标系统

概述 Qt的坐标系统由QPainter类控制。QPainter与QPaintDevice和QPaintEngine 类一起构成了Qt的绘画系统的基础。QPainter用于执行绘图操作&#xff0c;QPaintDevice是一个二维空间的抽象&#xff0c;可以使用QPainter在其上绘制&#xff0c;QPaintEngine 提供了QPainter用于在…

C语言中的柔性数组

uint8_t data[0];代码的含义老虎开始对这个数组不太了解&#xff0c;查阅后得知这是个柔性数组。 C语言中的柔性数组&#xff08;Flexible Array Member&#xff09;是一种特殊的数组&#xff0c;它被定义在结构体的最后一个元素中&#xff0c;其大小未知&#xff0c;也就是所…

Crow:黑魔法new_rule_tagged实现模板参数的绑定

Crow添加路由的定义: #define CROW_ROUTE(app, url) app.template route<crow::black_magic::get_parameter_tag(url)>(url) Crow:黑魔法get_parameter_tag-CSDN博客 介绍了get_parameter_tag的作用 route的定义为: auto route(std::string&& rule) -> …

java--Stream流常见的中间方法和终结方法

1.Stream流常见的中间方法 中间方法指的是调用完成后会返回新的Stream流&#xff0c;可以继续使用(支持链式编程) 2.Stream流常见的终结方法 ①终结方法指的是调用完成后&#xff0c;不会返回新Stream了&#xff0c;没法继续使用流了。 ②收集Stream流&#xff1a;就是把Stre…

MySQL执行流程_执行一条select语句,期间发生了什么

文章目录 执行一条select语句&#xff0c;期间发生了什么MySQL执行流程第一步&#xff1a;连接器第二步&#xff1a;查询缓存第三步&#xff1a;解析SQL第四步&#xff1a;执行SQL 执行一条select语句&#xff0c;期间发生了什么 MySQL执行流程 server层负责建立连接、分析和执…

SpringAMQP

目录 利用SpringAMQP实现HelloWorld中的基础消息队列功能: 1&#xff0e;在父工程中引入spring-amqp的依赖 2&#xff0e;在publisher服务中利用RabbitTemplate发送消息到simple.queue这个队列 3&#xff0e;在consumer服务中编写消费逻辑&#xff0c;绑定simple.queue这个…

Python Bokeh库详解:交互式数据可视化

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 数据可视化在数据分析和科学研究中起着至关重要的作用。而Bokeh&#xff08;发音为“bo-kay”&#xff09;是一个强大的Python交互式可视化库&#xff0c;提供了丰富的工具和功能&#xff0c;使得创建交互式、吸…

西工大网络空间安全学院计算机系统基础实验二(phase_3,phase_4,phase_5)

大家千万不要着急&#xff0c;不要慌张&#xff0c;即使自己并不了解多少汇编代码的知识&#xff0c;即使自己计基课上的基础知识学的并不扎实&#xff0c;也都不要紧&#xff0c;因为这次计基实验考察的重点并不是基础知识&#xff0c;而是对gdb工具的掌握&#xff0c;以及心细…

基于.NET Core + Quartz.NET+ Vue + IView开箱即用的定时任务UI

前言 定时任务调度应该是平时业务开发中比较常见的需求&#xff0c;比如说微信文章定时发布、定时更新某一个业务状态、定时删除一些冗余数据等等。今天给大家推荐一个基于.NET Core Quartz.NET Vue IView开箱即用的定时任务UI&#xff08;不依赖数据库,只需在界面做简单配…

Spring Boot学习随笔- 集成JSP模板(配置视图解析器)、整合Mybatis(@MapperScan注解的使用)

学习视频&#xff1a;【编程不良人】2021年SpringBoot最新最全教程 第五章、JSP模板集成 5.1 引入JSP依赖 <!--引入jsp解析依赖--> <!--C标签库--> <dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version&…