OpenCV拷贝与ROI_opencv a(rect).copyto(b.rect())-程序员宅基地

技术标签: opencv Mat 拷贝  OpenCV  

OpenCV的Mat变量之间拷贝分浅拷贝和深拷贝(由于3.0以后对IplImage变量不再使用,所以这里仅考虑Mat变量)


一. 浅拷贝

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

注意:浅拷贝不复制数据只创建矩阵头,实现数据共享,更改a, b, c三个变量中的任意一个都会对另外2个产生同样的作用。


二. 深拷贝

Mat a, b, c, d;
a.copyTo(b); // a copy to b
c = a.clone(); // a copy to c
a.convertTo(d, a.type()); // a copy to d

注意:深拷贝是完全拷贝,拷贝完成后得到一个独立的变更,数据自治,更改a, b, c, d四个变量中的任意一个都不会影响其它变量。


三. ROI

1. 浅拷贝

Mat  B = A(Range::all(), Range(1, 3));
Mat  B = A(Rect(0,0,100,100));
A和B共享内存,B只获得了A中ROI区域的位置信息,如下图(懒得画图了,从网上找了张图,变量不对应,请领会精神!)



2. 深拷贝


opencv中给出的例子是

Rect r(1, 1, 10, 20); // 指定src 的 ROI子图像区域

Mat dstroi =dst(Rect(0,10,r.width,r.height)); // 拿到 dst指定区域子图像的引用

src(r).convertTo(dstroi, dstroi.type(), 1,0); // ROI子图像之间的复制

此时,无需指定图像的ROI,计算与方便,清晰


另外,还可以用mask来拷贝,这里只给出一种方法,还会有不同的方法

 main()
{
    Mat matSrc = imread("e:/template/lena.jpg");
    Mat matDst;
     
    Mat matMask(matSrc.size(),CV_8UC1,Scalar(0));
    Rect rect(0, 0, 100, 100);
    //绘制mask
    rectangle(matMask,rect,Scalar(255),-1);
    //带有mask的copyto
    matSrc.copyTo(matDst,matMask);
 
    waitKey();
    return 0;
 
}


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sy95122/article/details/78707107

智能推荐

does not implement doesNotRecognizeSelector/methodSignatureForSelector-程序员宅基地

文章浏览阅读3.6k次。对于iOS开发的新手来说,有时在实现一个类的时候可能会觉得这个类要不要继承NSObject都无所谓,而且当时编译运行时貌视也没有问题。但是,到某个阶段时再运行时发现控制台报错:“does not implement methodSignatureForSelector: -- trouble ahead”以及“does not implement doesNotRecogn_does not implement

HTML5+CSS3+JS小实例:ANIME搭配SVG实现简约酷炫的登录界面_好看的登录页svg图片-程序员宅基地

文章浏览阅读188次。插件:anime(anime是一个轻量的JavaScript动画库,拥有简单而强大的API,可对CSS属性、SVG、DOM和JavaScript对象进行动画。插件下载:https://pan.baidu.com/s/1j6XtYYdYTFuy_KG0BAjU3w?实例:ANIME搭配SVG实现简约酷炫的登录界面。技术栈:HTML+CSS+JS。_好看的登录页svg图片

EBS开发_创建用户并关联员工_ebs 您未设置为员工,要访问此表单,您必需是员工-程序员宅基地

文章浏览阅读1.2k次。--以下脚本于20180116在Tony环境实现--创建用户并关联员工--分配职责有单独脚本,不在此处赘述-Oracle FND API–Create User--API - fnd_user_pkg.createuser----Example ---- ---------------------------------------- API to CREA_ebs 您未设置为员工,要访问此表单,您必需是员工

USACO Section 2.1 Sorting A Three_Valued Sequence - 应该有更好的方法-程序员宅基地

文章浏览阅读868次。题目的意思是有一列数只由1,2,3组成~~~需要咱们将1放在一起排在最前面~~~2放在一起排在中间~~~3放在一起放后面~~问对于这个数列最少要进行多少次交换... 我的方法是先统计1,2,3的个数~~那么就可以知道1,2,3分辨该放在哪个区域~~ 首先将1都放到该放的位置~~其所需步数就是找2~3的区域中1的个数~~然后再看1这个区域里有多少个2可以直接和2区域的交换~~有多

转:VCSA 6.7 升级到VCSA7.0_vcsa6.7升级7.0-程序员宅基地

文章浏览阅读4.6k次。原地址:https://www.crazycen.com/vmware/1660.htmlSphere 7.0正式版终于发布,小岑第一时间升级了下测试环境,升级过程一次成功,还是比较顺利在这之前,你需要了解vSphere7.0的升级步骤https://www.vmware.com/products/vsphere/upgrade-center.html优先升级你的vCenter,..._vcsa6.7升级7.0

台式机电源选购资料调研+为什么50%的时候负载功率最大+80PLUS的解释_电源负载80-程序员宅基地

文章浏览阅读1.5k次。电压偏移要足够低纹波日系电容/台系电容80 plus(节能转化率,电源转化率)如下单双路12v的方案。选择电源的时候,单路12V方案往往在不错的电源上使用,不用费心思去算CPU、显卡等硬件的供电分配问题,利用率也高;双路12V会在廉价的低端电源上出现,往往是12V1给显卡供电、12V2给CPU供电,分开输出,要自己计算,有一路超过电流限制就会断电保护,这样非常麻烦;CPU和显卡的功耗不..._电源负载80

随便推点

XILINX-FPGA下载工具--CH347FPGADownloader_jlink配合openocd实现xilinx fpga程序下载-程序员宅基地

文章浏览阅读1.7k次。CH347FPGADownloader是一款专用于CH347的FPGA下载软件,结合OpenOCD开源项目实现。_jlink配合openocd实现xilinx fpga程序下载

关于ElasticSearch使用Groovy做局部更新出现问题:Variable [new_tag] is not defined._caused_by":{"type":"null_pointer_exception","reaso-程序员宅基地

文章浏览阅读2.2k次,点赞3次,收藏2次。遇见问题特此记录希望能帮助到看到的人在跟着ElasticSearch权威指南学习过程中依旧发现有些语句是不再支持的在局部更新一节,依照Demo当前的数据索引结果是这样的:{ _index: "website", _type: "blog", _id: "123", _version: 5, found: true, _source: {_caused_by":{"type":"null_pointer_exception","reason":null}}}]},"status":400}

mobasterm登录时出现:access denied_mobaxterm的ssh连接显示access denied-程序员宅基地

文章浏览阅读1w次。https://blog.csdn.net/djshichaoren/article/details/81275141今天用MobaXterm连接阿里云服务器,总是显示Access Denied。一开始以为是22端口没打开,但是检查了安全组以后,发现22端口是默认打开的。使用了密钥发现还是不行。最后发现specify username是服务器的用户名,而不是自己随便命名的,我说咋进去以后只..._mobaxterm的ssh连接显示access denied

宁波CE欧盟认证:️打开欧洲市场的金钥匙_宁波ce认证-程序员宅基地

文章浏览阅读196次。对于宁波的企业来说,获得CE认证不仅是对其产品质量的认可,更是打开欧洲市场的️金钥匙。欧洲,作为世界上最大的经济体之一,拥有庞大的消费市场和高度发达的商业环境。️通过CE认证,宁波的企业可以将自己的产品推向这个广阔的市场,进一步提升品牌知名度和市场占有率。但是,正是因为这种严格的认证制度,使得通过CE认证的产品在市场上更具竞争力,更受消费者的青睐。在这座城市‍‍的众多企业中,有许多正致力于通过欧盟的CE认证,为自己的产品打开欧洲市场的大门。_宁波ce认证

如何通过编程更改Windows 10用户文件夹的名称-程序员宅基地

文章浏览阅读34次。在Windows 10中,用户文件夹是每个用户帐户的主文件存储位置。用户文件夹的默认名称是用户的用户名。但是,有时候我们可能需要通过编程方式更改用户文件夹的名称。本文将介绍如何使用Python编程语言修改Windows 10用户文件夹的名称。此外,我们还需要更新注册表中的文件夹路径,以确保系统能够正确识别更改后的用户文件夹。首先,我们获取当前的用户名和用户文件夹路径。通过上述代码,您可以使用Python编程语言更改Windows 10用户文件夹的名称。函数将新的文件夹重命名为原有的用户名。

鸿蒙应用开发游戏(一)---大鱼吃小鱼(界面部署)_鸿蒙游戏开发教程-程序员宅基地

文章浏览阅读889次,点赞22次,收藏8次。你是否玩过古老而不失优雅的大鱼吃小鱼,小鱼的生存之路何尝不是我们这些打工人的写照,以前想用安卓写的,碰巧鸿蒙它来了,那就边学习边记录吧,这个游戏一共分为6篇,记录了鸿蒙App的第一步创建,申明式UI控件如何使用,简单动画的使用,方法的封装,变量的状态管理,点击事件的分发,页面的生命周期,钩子的使用,一些用法与安卓原生的对比等,也算是一个小完整的项目了。第一篇相对简单,只是简单的布局摆放,用的知识点是Stack布局,State状态管理,Entry入口,Component注解等1、创建项目2、项目结构。