Halcon内存不够, Not enough memory available

halcon在运行时,有可能会遇到这个问题,Not enough memory available。就是说内存不够了,这个算子运行不下去。

以前我也遇到过这个问题,后面把每个hobject和图像类的,使用完之后销毁就好了。这个算是内存泄漏的问题吧。。

前几天我又遇到这个问题。第一次运行就遇这个问题了,应该不是内存泄漏的问题。后面我想了下,这次应该真的是内存太小了。现在的电脑虽然是64位的,但内存只有4GB。(halcon12)而且这次的图片比较大,4000x3000的,1200万的相机,图片处理起来,简单的算子还好,不会出问题。但有个别的算子,处理起来就出现内存不足的问题。当时使用的算子是这个,edges_sub_pix。当时的算法也找不到其他算子来代替。后面发现假如把图片一小块一小块处理,这样的话,或许就不需要很大的内存了。

总结一下,关于这个问题处理方法。

1.增加内存,使用64位机,内存加大。(例如原来是4GB,加到8GB)。另外,据说32位机不支持超过4GB的内存,就是说,假如是32位机,你内存加到8GB也没用。(据说,没具体考究过)

2.换算子。因为某些算子需要的内存特别大,换一个同类的,能满足要求的,也是可以的。

3.换相机。图片越大,处理所需要的内存越大。换个小一些的相机也许也是可以的。(换相机是比较麻烦的,换了也不知道合适不合适,可以先用PS把图片的尺寸改一下,然后再试一下,到时就知道换什么尺寸的相机了。)

4.缩小图片尺寸。例如,我的图片尺寸(4000x3000)太大了,就可以把图片尺寸缩小。使用zoom_image_size。但使用这个算子的同时 ,也意味着,获得的精度降低了。

5.如果不想丢掉精度,暂时又没办法更改电脑配置,算子暂时也没办法换,而恰巧你所需要检测的目标是在某固定区域的。那还有个方法。reduce_domain。你没听说,就这个算子,这个我们使用得如此之多的算子。把你所需要检测最小区域圈出来,再进行检测。我就是使用这个方法的。

6.及时清理内存,也就是使用obj.Dispose()方法(C#里)。把程序分小块,每一块处理完就把相应内存清理。

再总结一下。
这个问题就是算子处理图片所需要的内存不足。
抓住几个要点处理就可以了,算子,图片,内存。

Halcon中的彩色图转换为Bitmap时报错内存损坏的原因可能有几个。 首先,可能是因为彩色图像数据的大小超出了Bitmap所能容纳的范围。Bitmap对象在内存中存储图像数据时,需要根据每个像素的颜色深度(比特数)来分配内存空间。如果彩色图像的数据量过大,超出了Bitmap所能表示的范围,就会导致内存损坏的问题。此时可以尝试使用更适合存储大型图像数据的数据结构,如字节数组来存储彩色图像数据,而不是直接转换为Bitmap。 其次,可能是在彩色图像转换为Bitmap的过程中,数据类型不匹配引发内存损坏。Halcon中的彩色图像数据通常使用三维数组表示,而Bitmap对象需要使用连续的内存空间来存储图像数据。如果在转换过程中没有正确处理数据类型或者数据维度,就会导致内存损坏的问题。此时可以检查代码中的数据类型转换操作,确保数据转换的正确性。 另外,可能是转换过程中发生了内存溢出或越界访问等问题,导致内存损坏。在处理大型图像数据时,应该合理分配内存空间,尽量避免大量临时变量的创建和释放,以及数组的越界访问等操作。可以尝试使用更高效的算法或者数据结构来处理图像数据,以减少内存的使用量。 总之,当Halcon中的彩色图转换为Bitmap时报错内存损坏,需要仔细检查代码中的数据类型转换、内存分配和访问等操作,确保操作正确,并合理优化内存使用,避免内存溢出或越界访问等问题的发生。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值