一、VS下不易发现的内存泄露
在VS下调用Halcon算子时,要特别注意:所有输出的变量,不管有没有用到,都不要用NULL来替代。否则会导致程序会有2-4kb的内存泄露。(Halcon12及以前版本均存在这个问题,最新的版本是否存在有待验证)
例如,我们需要计算某个区域的面积,而不关心另两个一并计算得出的中心点坐标,可能会这样写:
HTuple hv_Area; AreaCenter(ho_Region, &hv_Area, NULL, NULL);
这种方式会导致程序会有2-4kb的内存泄露,是不可取的,正确的方式如下:
HTuple hv_Area,hv_Row,hv_Column; AreaCenter(ho_Region, &hv_Area, &hv_Row, &hv_Column);
二、关于模板匹配的分值设置
举个例子,在用find_shape_model寻找定位核时,设置分值是0.5,没有找到该定位核。降低该分值(如设成0.4),找到了,但是对应的匹配分值是大于0.5的?(Halcon17.12一直到Halcon18.11一直存在)
也许是halcon自身的bug,也许是计算匹配分值的逻辑不太一样。目前做法是:把分值设置的低一些,找到后再按照偏高点的分值进行过滤
三、二维码识别异常崩溃,电脑会卡死
一般如果是图像质量有问题等原因导致的二维码没有识别出结果,哪怕设置了最大超时时间,也会导致程序甚至电脑卡死。当然这个是halcon12及以前存在的问题。
Halcon18已经解决了该问题!!!
四、同一张图,运行多次后检测结果可能会不一样的异常问题
这种情况仅在现场工控机运行时出现过,自己笔记本电脑无法复现。初步可以确定为LocalThreshold算子导致的,输入为reduce_domain得到的图像,若里面的感兴趣区域中,有低于LocalThreshold中的Mask尺寸,可能会导致该异常!
五、GenMeasureRectangle2 创建的测量矩,不能超过图像的边界,如果超过的,当时不出问题,运行五分钟左右就会有异常,后续执行和测量矩相关的操作均会异常
//SetFuzzyMeasure(gray)运行多次会出异常,原因不明
六、tile_images_offset()算子太耗时
halcon18.05依然是这个现象,无论是图像横向拼图还是纵向拼图,都比较耗时,还不如自己内存拷贝效率高。(另外,哪怕是纵向拼图,如果图像高度是4的倍数的话,效率也要高些,不是特别理解,暂时没有充分验证)