HObject复制耗时试用

测试源码一

 //第一步const int N = 1000;HObject[] imgs = new HObject[N];for (int i = 0; i < N; i++){HOperatorSet.GenImageConst(out  imgs[i], "byte", 1024 + i, 1024 + i);}//第二步List<HObject> lists = new List<HObject>();for(int i = 0; i < N; i++){lists.Add(imgs[i].Clone());} 

时间记录方法

在这里插入图片描述

new HObject(imgs[i].Key,true) 复制key

N:200 第一步108ms 第二步2ms
N:200 第一步145ms 第二步2ms
N:200 第一步101ms 第二步3ms

N:1000 第一步666ms 第二步4ms
N:1000 第一步718ms 第二步5ms
N:1000 第一步1218ms 第二步5ms

public HObject(IntPtr key)
this(key, copy: true)
{
AssertObjectClass();
GC.KeepAlive(this);
}
HObject(imgs[i].Key)直接调用HObject(imgs[i].Key,true)

改成:lists.Add(imgs[i].Clone());

N:200 第一步92ms 第二步198ms
N:200 第一步90ms 第二步238ms
N:200 第一步98ms 第二步210ms

N:1000 第一步1225ms 第二步4385ms
N:1000 第一步830ms 第二步3725ms
N:1000 第一步871ms 第二步3475ms

改成:new HObject(imgs[i].Key, false) 不复制key

N:200 第一步90ms 第二步1 ms
N:200 第一步87ms 第二步1 ms
N:200 第一步92ms 第二步1 ms
N:1000 第一步706ms 第二步1ms
N:1000 第一步541ms 第二步1ms
N:1000 第一步508ms 第二步1ms

结论一: 根据时间推测,clone复制了图形信息,复制key只复制了key的相关信息,不复制key什么都没复制。

原图释放

结论二:原图释放后,clone和复制key,仍然可以使用。不复制key的无法使用。
错误提示如下:HalconDotNet.HOperatorException:“HALCON error #4051: Image data management: object has been deleted already in operator area_holes”
测试代码如下:

 HOperatorSet.GenImageConst(out HObject img, "byte", 1024, 1024 );HObject img0 = img.Clone();HObject img1 = new HObject(img.Key,true);HObject img2 = new HObject(img.Key, false);img.Dispose();HOperatorSet.AreaHoles(img0, out HTuple t0);HOperatorSet.AreaHoles(img1, out HTuple t1);HOperatorSet.AreaHoles(img2, out HTuple t2);  

图形指针

clone会创建新的图形指针,复制Key和不复制Key都不复制图像指针。

HOperatorSet.GenImageConst(out HObject img, "byte", 1024, 1024 );
HTuple tmp = new HTuple();
HOperatorSet.GetImagePointer1(img, out HTuple ptr, out tmp, out tmp, out tmp);
HObject img0 = img.Clone();
HObject img1 = new HObject(img.Key,true);
HObject img2 = new HObject(img.Key, false);
HOperatorSet.GetImagePointer1(img0, out HTuple ptr0, out tmp, out tmp, out tmp);
HOperatorSet.GetImagePointer1(img1, out HTuple ptr1, out tmp, out tmp, out tmp);
HOperatorSet.GetImagePointer1(img2, out HTuple ptr2, out tmp, out tmp, out tmp);

ptr1、ptr2和ptr相同。
ptr0和ptr不同。
结论三:复制Key,操作是同一个图形,但halcon的函数都是创建新的HObject存放计算结果,所以无影响。当你使用非安全代码直接操作指针时,这才是一个问题。

结论

如果不用非安全代码,HObject(img.Key)可以替换img.Clone(),前者用时更少。

扩展阅读

我想对大家说的话
工作中遇到的问题,可以按类别查阅鄙人的算法文章,请点击《算法与数据汇总》。
学习算法:按章节学习《喜缺全书算法册》,大量的题目和测试用例,打包下载。重视操作
有效学习:明确的目标 及时的反馈 拉伸区(难度合适) 专注
闻缺陷则喜(喜缺)是一个美好的愿望,早发现问题,早修改问题,给老板节约钱。
子墨子言之:事无终始,无务多业。也就是我们常说的专业的人做专业的事。
如果程序是一条龙,那算法就是他的是睛
失败+反思=成功 成功+反思=成功

视频课程

先学简单的课程,请移步CSDN学院,听白银讲师(也就是鄙人)的讲解。
https://edu.csdn.net/course/detail/38771
如何你想快速形成战斗了,为老板分忧,请学习C#入职培训、C++入职培训等课程
https://edu.csdn.net/lecturer/6176

测试环境

操作系统:win7 开发环境: VS2019 C++17
或者 操作系统:win10 开发环境: VS2022 C++17
如无特殊说明,本算法用**C++**实现。

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

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

相关文章

使用 uni-app 开发微信小程序的详细指南

使用 uni-app 开发微信小程序的详细指南 前言 随着微信小程序的广泛应用&#xff0c;越来越多的开发者开始关注小程序开发。而 uni-app 是 DCloud 推出的一个使用 Vue.js 开发跨平台应用的框架&#xff0c;不仅支持开发 H5、iOS 和 Android 应用&#xff0c;还可以用于开发微…

微博舆情分析技术文档分享

项目整体介绍&#xff1a;舆情瞭望——基于NLP的网络空间舆情检测分析系统 1. 项目背景与目标 该项目旨在对微博文章及其评论进行文本分析&#xff0c;重点包括情感分析和词频统计。通过对大量用户评论的处理与分析&#xff0c;帮助用户了解公众情绪和话题趋势&#xff0c;特…

基于PHP的新闻管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于phpMySQL的新闻管理系统。…

MySQL的缓存策略

目录 一、MySQL 缓存方案用来干什么 二、提升MySQL访问性能的方式 1、读写分离&#xff08;MySQL的主从复制&#xff09; 2、连接池 3、异步连接 三、缓存方案是怎么解决的 1、缓存与MySQL一致性状态分析 2、制定热点数据的读写策略 四、缓存方案问题的解决方法 1、缓…

酸枣病虫害智能化防控系统的探索与实践,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建枣类作物种植场景下酸枣病虫害智能检测识别系统

智慧农业&#xff0c;作为现代农业的高级形态&#xff0c;通过集成物联网、大数据、人工智能等先进技术&#xff0c;实现了农业生产过程的精准化、智能化管理。在酸枣等经济作物的种植过程中&#xff0c;病虫害的及时监测与防控直接关系到作物的产量与质量&#xff0c;进而影响…

react hooks--React.memo

基本语法 React.memo 高阶组件的使用场景说明&#xff1a; React 组件更新机制&#xff1a;只要父组件状态更新&#xff0c;子组件就会无条件的一起更新。 子组件 props 变化时更新过程&#xff1a;组件代码执行 -> JSX Diff&#xff08;配合虚拟 DOM&#xff09;-> 渲…

算法【双向广搜】

双向广搜常见用途 1&#xff1a;小优化。bfs的剪枝策略&#xff0c;分两侧展开分支&#xff0c;哪侧数量少就从哪侧展开。 2&#xff1a;用于解决特征很明显的一类问题。特征&#xff1a;全量样本不允许递归完全展开&#xff0c;但是半量样本可以完全展开。过程&#xff1a;把…

Knife4j 一款基于Swagger的开源文档管理工具

一、简单介绍 1.1 简介 Knife4j 是一款基于Swagger的开源文档管理工具&#xff0c;主要用于生成和管理 API 文档 二、使用步骤&#xff1a; 2.1 添加依赖&#xff1a; <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spr…

使用sqoop报错

报错一&#xff1a; java.io.IOException: java.lang.ClassNotFoundException: org.apache.hadoop.hive.conf.HiveConf 这个错误表示在执行与 Hive 相关的操作时&#xff0c;程序无法找 org.apache.hadoop.hive.conf.HiveConf 这个类。这个类是 Hive 的配置类&#xff0c;它用…

spark之不同序列化对比

一&#xff0c;spark的rdd的序列话不同介绍 下面是使用不同序列化后的占用资源和数据大小 2&#xff0c;sparksql中序列化的区别 sparksql中使用序列化和不使用差别不大&#xff0c;英文sparksql中默认使用了encode自己实现的序列化方法&#xff0c;加上与不加序列化差别不大…

编译成功!QT/6.7.2/Creator编译Windows64 MySQL驱动(MSVC版)

相邻你找了很多博文&#xff0c;都没有办法。现在终于找到了正宗。 参考 GitHub - thecodemonkey86/qt_mysql_driver: Typical symptom: QMYSQL driver not loaded. Solution: get pre-built Qt SQL driver plug-in required to establish a connection to MySQL / MariaDB u…

.whl文件下载及pip安装

以安装torch_sparse库为例 一、找到自己需要的版本&#xff0c;点击下载。 去GitHub的pyg-team主页中找到pytorch-geometric包。网址如下&#xff1a; pyg-team/pytorch_geometric​github.com/pyg-team/pytorch_geometric 然后点击如图中Additional Libraries位置的here&am…

Leetcode Hot 100刷题记录 -Day18(反转链表)

反转链表&#xff1a; 问题描述&#xff1a; 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]示例 2&#xff1a; 输入&#xff1a;head [1,2] 输出&a…

基于阿里云免费部署Qwen1-8B-chat模型并进行lora参数微调从0到1上手操作

文章目录 一、申请资源二、创建实例三、克隆微调数据四、部署Qwen1-8B-chat模型1、环境配置2、模型下载3、本地模型部署 五、模型微调1、拉取Qwen仓库源码2、微调配置3、合并微调参数4、本地部署微调模型 一、申请资源 阿里云账号申请PAI资源详细教程我已于部署ChatGLM3时写过…

双立方(三次)卷积插值

前言 图像处理中有三种常用的插值算法&#xff1a; 最邻近插值 双线性插值 双立方&#xff08;三次卷积&#xff09;插值 其中效果最好的是双立方&#xff08;三次卷积&#xff09;插值&#xff0c;本文介绍它的原理以及使用 如果想先看效果和源码&#xff0c;可以拉到最底…

关于若尔当矩阵中过渡矩阵的求法

关于若尔当矩阵中过渡矩阵的求法 豆瓜爱数学 ​关注 桜井雪子 等 114 人赞同了该文章 本文主要介绍考研中常考的另一类问题&#xff0c;当我们确认一个Jordan标准形时&#xff0c;对于过渡矩阵如何确定&#xff1f;这个常常是我们复习过程中容易忽略的一部分内容&#xff0c;…

Ubuntu 22.04 源码下载的几种方法

1、查询当前系统内核版本 rootubuntu22:~# uname -r 5.15.0-118-generic 2、查询本地软件包数据库中的内核源码信息 rootubuntu22:~# apt search linux-source Sorting... Done Full Text Search... Done linux-source/jammy-updates,jammy-security,now 5.15.0.119.119 all…

Gateway学习笔记

目录 介绍&#xff1a; 核心概念 依赖 路由 断言 基本的断言工厂 自定义断言 过滤器 路由过滤器 过滤器工厂 自定义路由过滤器 全局过滤器 其他 过滤器执行顺序 前置后置&#xff08;&#xff1f;&#xff09; 跨域问题 yaml 解决 配置类解决 介绍&#x…

物联网——USART协议

接口 串口通信 硬件电路 电平标准 串口参数、时序 USART USART主要框图 TXE: 判断发送寄存器是否为空 RXNE: 判断接收寄存器是否非空 RTS为输出信号&#xff0c;用于表示MCU串口是否准备好接收数据&#xff0c;若输出信号为低电平&#xff0c;则说明MCU串口可以接收数据&#…

简单题69.x的平方根 (Java)20240919

问题描述&#xff1a; java代码&#xff1a; class Solution {public int mySqrt(int x) {if (x < 2) {return x; // 0 和 1 的平方根分别是它们自己}int left 2; // 从2开始&#xff0c;因为0和1已经处理了int right x / 2; // 最大可能的平方根不会超过 x / 2int mid;w…