一个企业做网站需要什么资料,wordpress 5.2.1添加中文,wordpress显示某一类文章,wordpress内网访问1 读取图片需要及时手动释放
一个6M的图片通过halcon进行加载#xff0c;大约会消耗200M的内存#xff0c;如果等待GC回收#xff0c;而你又在不停的读取图片#xff0c;你的内存占用#xff0c;将在短时间内飙升。
2 halcon控件显示图片需要清空。
/// summary大约会消耗200M的内存如果等待GC回收而你又在不停的读取图片你的内存占用将在短时间内飙升。
2 halcon控件显示图片需要清空。
/// summary
/// 显示对象
/// /summary
/// param nameobj/param
/// param namebFull/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 高消耗算子
目前我遇到了两个能大量消耗内存算子图片越大消耗的内存几乎成指数上升。 edges_sub_pix 这个函数用于找边缘非常好用但是如果你直接对一个6M图片进行全图操作一瞬间你可能就会消耗3个G的内存 所以好的做法是先通过blob进行定位然后抠图。然后对图的局部进行edges_sub_pix此时内存压力会小很多。 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提供的函数改变这种策略以避免内存的大量消耗等我搞明白了再和大家分享。