Halcon句柄操作

2022/1/23 23:06:01

本文主要是介绍Halcon句柄操作,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

在Windows操作系统下,句柄代表一个标识符,通常是一个整数,和内存管理机制有关。一般句柄的命名都带有handle,使用时注意即可。对于Halcon新人而言,往往不注重句柄的清除问题,这类似于C++中new,delete一样,如果句柄不清除的话,回导致软件运行过程中占用内存越来越大。
不仅仅Halcon存在句柄,很多开放的SDK都会有句柄,比如说海康相机SDK中的handle代表相机设备句柄,通过句柄可以更改相机的参数

句柄不释放带来的内存问题

比如说,刚新建一个halcon项目时,可以看到

for Index := 1 to 100 by 1
   dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
endfor

打开任务管理器可以看见,在句柄创建之前,Halcon运行内存是68.9,建立了100次窗口句柄之后,运行内存上升到83.3.可能对于工控机来说,这点内存不算什么,但是一个大型项目来说,工控机一般是不停运转的,如果没有一个好的halcon管理习惯,会对电脑操作系统带来巨大伤害。

Halcon中常见的句柄创建及销毁

halcon的Image等,系统会自己释放掉,但是句柄需要自己手动释放。(好消息是halcon18过后版本无需自己手动释放)

1. 相机句柄
打开相机句柄,需要手动关闭采集设备句柄

open_framegrabber ('File', 1, 1, 0, 0, 0, 0, 'default', -1, 'default', -1, 'false', 'fabrik', '', 1, 2, FRHandle)
......
......
close_framegrabber (FRHandle)

2. 模板句柄
开辟了一个模板句柄,需要清除模板句柄

create_shape_model (Image, 'auto', -0.39, 0.79, 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)
......
......
clear_shape_model (ModelID)

3. 文件句柄
打开文件句柄,需要清除

open_file ('standard', 'output', FileHandle)
......
......
close_file (FileHandle)

其余的还有测量句柄,深度学习句柄、OCR字符句柄等等。
在halcon程序段中,要特别注意句柄的创建及销毁。
在大型C++视觉项目中,可以在类的析构函数中增加函数判断句柄是否销毁,若没有销毁的话,在
析构函数内再执行一遍句柄清除函数。



这篇关于Halcon句柄操作的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程