c#调用halcon视觉处理,内存泄漏,内存无法释放的解决方法之一

开发环境:windows7-64位,VisualStudio2013-C#,halcon12-64位

用C#调用同事用Halcon12写的图片处理程序时,内存一直增加,无法释放。halcon每次处理4张图片,每张图片10M,每次调用之后,内存就增加40M无法释放。在C#中将能释放的图像资源全部释放后,问题仍然得不到解决。

最终查出为halcon12不会自动释放不再使用的内存,需要手动释放。

gen_measure_rectangle2 (param[0]+Index*20, param[1], 0, 300, 20, Width, Height, 'nearest_neighbor', MeasureHandle)

gen_rectangle2 (Rectangle1, param[0]+Index*20, param[1], 0, 200, 20)

measure_pos (image, MeasureHandle, 1, param[2], param[3], param[4], RowEdge, ColumnEdge, Amplitude, Distance)

if(|RowEdge|>0)

    row:=[row,RowEdge]

    col:=[col,ColumnEdge] 

    gen_cross_contour_xld (Cross, RowEdge, ColumnEdge, 36, 0.785398)

    concat_obj (okregion, Cross, okregion)

endif

close_measure (MeasureHandle)

以上代码为halcon12中的代码,注意划横线的两行,及红色变量。最后调用close_measure方法释放内存。即算子调用结束,一定要配合close_measure方法释放内存,否则容易出现内存泄漏问题。

其他例如:read_ocr_class_mlp 一定要配合clear_ocr_class_mlp

read_ocr_class_mlp ('Document.omc', OCRHandle)
do_ocr_multi_class_mlp (Characters, ImageReduced, OCRHandle, X, Confidence)
clear_ocr_class_mlp(OCRHandle)


以上内存泄漏问题,在halcon16中没有发生,即没有手动释放,也没有发生内存泄漏

2018-11-29

 

  • 7
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Halcon中,您可以通过编写一个带有循环的程序来实现多次画ROI的功能。下面是一个示例程序: ```hcl procedure loop_draw_rectangle(Image: HImage; var ROIs: HRegion; NumROIs: Integer) var i: Integer; Row, Column, Phi, Length1, Length2: HTuple; begin for i := 1 to NumROIs do begin disp_image(Image); draw_rectangle2(Image, Row, Column, Phi, Length1, Length2); ROIs[i-1] := gen_rectangle2(Row, Column, Phi, Length1, Length2); end; end; ``` 以上代码定义了一个名为loop_draw_rectangle的过程,它接受一个输入图像Image、一个用于存储ROI的HRegion数组ROIs和需要绘制的ROI数量NumROIs。在循环中,每次调用draw_rectangle2方法绘制一个ROI,并将其存储到ROIs数组中。 要在C#调用此代码,您可以使用Halcon/.NET接口。请确保已在C#项目中添加了Halcon/.NET引用。下面是一个示例代码片段: ```csharp using HalconDotNet; // 创建Halcon变量 HObject image, rois; HTuple numROIs = new HTuple(5); // 从文件中读取图像 HOperatorSet.ReadImage(out image, "image.png"); // 调用loop_draw_rectangle过程 HalconScripts.loop_draw_rectangle(image, out rois, numROIs); // 显示结果 HOperatorSet.DispObj(image); HOperatorSet.DispObj(rois); ``` 以上代码中,我们使用HalconScripts类来调用loop_draw_rectangle过程,并将结果存储在一个名为rois的HObject对象中。最后,我们使用Halcon中的DispObj方法来显示结果图像和ROI。 请注意,以上代码仅为示例,您需要根据实际情况进行修改和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值