【halcon】C# halcon 内存暴增

1 读取图片需要及时手动释放

一个6M的图片通过halcon进行加载,大约会消耗200M的内存,如果等待GC回收,而你又在不停的读取图片,你的内存占用,将在短时间内飙升。

2 halcon控件显示图片需要清空。

/// <summary>
/// 显示对象
/// </summary>
/// <param name="obj"></param>
/// <param name="bFull"></param>
public void ShowObj(HObject obj, bool bFull = true)
{hSmart?.HalconWindow.ClearWindow(); //必须清理掉不然会显示多张图片hSmart?.HalconWindow.DispObj(obj);if (bFull){hSmart?.SetFullImagePart();}
}

在显示前清空窗口,不然会覆盖显示多张图片,从而使得内存一路上涨。

3 先opening再打散

通过connection算子打散区域之前,先看看得到多少个区域,如果单个区域过多也会占用大量内存,毕竟打散之前是一个对象,打散之后可能是几万个对象。

所以,可以先对整体进行opening操作,去掉一些小杂碎,再打散就会得到更少的对象,从而减少内存的压力

4 高消耗算子

目前我遇到了两个能大量消耗内存算子,图片越大消耗的内存几乎成指数上升。

  1.  edges_sub_pix  这个函数用于找边缘非常好用,但是如果你直接对一个6M图片进行全图操作,一瞬间你可能就会消耗3个G的内存! 所以,好的做法是先通过blob进行定位,然后抠图。然后对图的局部进行edges_sub_pix,此时内存压力会小很多。
  2.  lines_gauss 这个函数用于找划痕之类的瑕疵非常好用,缺点也是计算量太大,会消耗大量的内存。但是这个函数和edges_sub_pix 还不一样。因为如果你是找划痕一般就是针对全图的,没有抠图的余地,所以如果图片很大,内存飙升就是板上钉钉。

5 halcon引擎中使用高消耗算子

我们知道使用halcon引擎是我们开放变得非常方便,但是如果在halcon引擎中使用高消耗算子,这点是非常致命的。比如在halcon引擎lines_gauss此时内存会飙升,更惨的是释放的还慢。如果不使用halcon引擎,直接调用lines_gauss虽然内存会飙升,但是属于图片占用的内存还是会立刻被释放,但是如果在halcon引擎中,这个就会释放很慢,如果连续处理图片,你的内存就会“爆炸”!多的部分会溢出到硬盘,你的硬盘读写就会飙升,然后你的电脑就卡了。

6 halcon引擎中传入图片

目前给我的感觉是,如果我封装了一个算子,然后通过halcon引擎调用,然后这个算子需要传入图片参数,这个图片传入引擎后,过很久才会被释放掉。

7 unin 输入输出(待验证)

Union2的出参和入参一致时,必须手动释放,这样才能100% 马上回收内存。

貌似大家都用遇到过这种问题,当入参和出参相同时,可能会造成内存释放缓慢。我目前还没明显体会到,有待以后验证!

8 对轮廓进行合并

如果此时有很多细小的轮廓(几千个几万个),此时将会非常耗时。 

小结

当halcon用到一个算子,消耗了3个G的内存,如果这个消耗的内存是,算子本身需要分配的内存,那么此时这片内存一般不会被释放,会一直保留在那。我感觉这是halcon的一种提升速度策略。但如果是图片加载导致的内存上升,这种一般很快就会被回收掉。

貌似,可以通过halcon提供的函数,改变这种策略,以避免内存的大量消耗,等我搞明白了再和大家分享。

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

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

相关文章

dp-带权活动选择

Description 给定n个活动&#xff0c;活动ai表示为一个三元组(si,fi,vi)&#xff0c;其中si表示活动开始时间&#xff0c;fi表示活动的结束时间&#xff0c;vi表示活动的权重, si<fi。带权活动选择问题是选择一些活动&#xff0c;使得任意被选择的两个活动ai和aj执行时间互不…

dataframe.values.tolist() 举例说明

dataframe.values.tolist() 是将 Pandas DataFrame 中的数据转换为嵌套的 Python 列表&#xff08;list of lists&#xff09;。这将返回一个包含 DataFrame 所有行和列的嵌套列表。以下是一个简单的例子&#xff1a; 假设有如下的 DataFrame&#xff1a; import pandas as p…

【Unity记录】EDM4U(External Dependency Manager)使用说明

GitHub - googlesamples/unity-jar-resolver: Unity plugin which resolves Android & iOS dependencies and performs version management 引入谷歌包时发现有这个玩意&#xff0c;主要用途是自动搜索工程内任意文件夹下的Editor/*Dependencies.xml文件 <dependencie…

基于eBPF检测内核模块安装行为

本文实现一个简单的示例&#xff0c;展示了如何编写一个eBPF程序来检测未知内核模块的安装行为。 首先&#xff0c;请确保系统已安装eBPF工具链。然后&#xff0c;创建一个名为unknown_module_detection.c的C文件&#xff0c;并使用以下代码填充内容&#xff1a; c #include …

D*算法学习

系列文章目录 A*算法学习-CSDN博客 弗洛伊德算法&#xff08;Floyd&#xff09;和路径平滑弗洛伊德算法&#xff08;Smooth Floyd&#xff09;学习-CSDN博客 目录 系列文章目录 前言 一、D*算法是什么&#xff1f; 二、D* 算法是对 A* 算法的改进 三、增量搜索是什么 总…

梯度爆炸梯度消失

梯度消失和梯度爆炸是深度学习中常见的问题&#xff0c;与神经网络的训练相关。这两个问题都涉及到梯度在反向传播过程中的传递。 梯度消失&#xff08;Gradient Vanishing&#xff09;&#xff1a; 当神经网络较深时&#xff0c;反向传播过程中梯度可能逐层减小&#xff0c;最…

【FMC139】青翼科技基于VITA57.1标准的4路500MSPS/1GSPS/1.25GSPS采样率14位AD采集FMC子卡模块

板卡概述 FMC139是一款基于VITA57.1标准规范的JESD204B接口FMC子卡模块&#xff0c;该模块可以实现4路14-bit、500MSPS/1GSPS ADC采集功能。该板卡ADC器件采用ADI公司的AD9680芯片,全功率-3dB模拟输入带宽可达2GHz。该ADC与FPGA的主机接口通过8通道的高速串行GTX收发器进行互联…

Python模块与Linux stat 命令:双剑合璧的文件系统探索

简介&#xff1a;在Linux和Unix-like系统中&#xff0c;stat命令用于获取文件或目录的详细属性信息&#xff0c;包括但不限于大小、所有权、权限和时间戳。同样&#xff0c;在Python编程中&#xff0c;我们也有多个模块&#xff08;例如os、pathlib等&#xff09;提供了与stat类…

来CSDN一周年啦!!!

各位CSDN的uu们你们好呀&#xff0c;今天是小雅兰来到CSDN创作的一周年啦&#xff0c;时间&#xff0c;说长不长&#xff0c;说短也不短&#xff0c;在这一年中&#xff0c;我认为我也收获了一些很有价值的东西吧&#xff01;&#xff01; 一周年了&#xff0c;该创作的还得继续…

基于PAM自定义ssh登陆认证

以下是一个基于Linux PAM认证SSH登录的动态链接库&#xff08;.so&#xff09;模块的示例代码&#xff0c;使用C语言编写&#xff0c;其中包括对用户名、密码以及约定的口令的认证&#xff1a; c #include <stdio.h> #include <stdlib.h> #include <string.h&g…

【PTA-C语言】实验四-循环结构II

如果代码存在问题&#xff0c;麻烦大家指正 ~ ~有帮助麻烦点个赞 ~ ~ 实验四-循环结构II 7-1 跟奥巴马一起画方块&#xff08;分数 15&#xff09;7-2 打印九九口诀表&#xff08;分数 10&#xff09;7-3 求符合给定条件的整数集&#xff08;分数 15&#xff09;7-4 求特殊方程…

AGI智能新时代,大模型为软件开发带来范式变革

导语 | 人工智能作为新一轮科技革命和产业变革的重要驱动力量&#xff0c;尤其是在当下新一轮 AI 大模型、生成式 AI 浪潮背景下&#xff0c;重视通用人工智能&#xff08;AGI&#xff09;成为行业的共识。在当前&#xff0c; AGI 技术背后的逻辑究竟是怎样的&#xff1f;技术创…

力扣二叉树--第三十六天

前言 两天没写题了&#xff0c;期末月&#xff0c;压力有点大&#xff0c;休息一下&#xff0c;释放一下压力。焦虑常在&#xff0c;调整好心态啊&#xff01;度过这一个月。写中序遍历的时候&#xff0c;发现自己竟然对树是怎么遍历的很模糊&#xff01;&#xff01;&#xf…

CF688A Opponents

Opponents 题面翻译 问题描述 小白有 n 个对手&#xff0c;他每天都要和这些对手PK。对于每一天&#xff0c;如果 n 个对手全部到齐&#xff0c;那么小白就输了一场&#xff0c;否则小白就赢了一场。特别的&#xff0c;如果某天一个对手都没有到&#xff0c;也算小白赢。现在…

杨志丰:OceanBase助力企业应对数据库转型深水区挑战

11 月 16 日&#xff0c;OceanBase 在北京顺利举办 2023 年度发布会&#xff0c;正式宣布&#xff1a;将持续践行“一体化”产品战略&#xff0c;为关键业务负载打造一体化数据库。OceanBase 产品总经理杨志丰发表了《助力企业应对数据库转型深水区挑战》主题演讲。 以下为演讲…

【代码】基于改进差分进化算法的微电网调度研究matlab

程序名称&#xff1a;基于改进差分进化算法的微电网调度研究 实现平台&#xff1a;matlab 代码简介&#xff1a;了进一步提升差分进化算法的优化性能,结合粒子群(PSO)算法的进化机制,提出一种混合多重随机变异粒子差分进化算法(DE-PSO)。所提算法不仅使用粒子群差分变异策略和…

7.C转python

1.对字典的各种操作都是对键来进行的 2.关于字典的遍历操作 例: 还可以这样遍历 所以生成了一个固定模版来遍历字典: 例: 那两个名字可以换 例: 3.合法key的类型: 要求可哈希 在python中,专门提供了一个hash()函数来计算哈希值 例: 有的类型是不能计算哈希的,如:列表,字…

深度学习与深度迁移学习有什么区别?

深度学习包含深度迁移学习&#xff0c;它们都利用了深层神经网络&#xff08;Deep Neural Network&#xff0c;DNN&#xff09;来处理数据&#xff0c;并从中学习特征。但是&#xff0c;它们也有一些区别。 深度学习是一种机器学习方法&#xff0c;它通过多层神经网络来自动学…

分享89个节日PPT,总有一款适合您

分享89个节日PPT&#xff0c;总有一款适合您 89个节日PPT下载链接&#xff1a;https://pan.baidu.com/s/1j6Yj-7UCcUyV4V_S_eGjpQ?pwd6666 提取码&#xff1a;6666 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整理更不易…

编写高质量Python (第26条) 用 functools.wraps 定义函数装饰器

第26条 用 functools.wraps 定义函数装饰器 ​ Python 中有一个特殊写法&#xff0c;可以用装饰器来封装某个函数&#xff0c;从而让函数在执行这个函数之前与执行完这个函数之后&#xff0c;分别运行某些代码。这意味着&#xff0c;调用者传给参数的参数值、函数返回给调用者…