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,计算机视觉,内存泄漏)