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句柄操作
打开任务管理器可以看见,在句柄创建之前,Halcon运行内存是68.9,建立了100次窗口句柄之后,运行内存上升到83.3.可能对于工控机来说,这点内存不算什么,但是一个大型项目来说,工控机一般是不停运转的,如果没有一个好的halcon管理习惯,会对电脑操作系统带来巨大伤害。
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)
  1. 模板句柄
    开辟了一个模板句柄,需要清除模板句柄
create_shape_model (Image, 'auto', -0.39, 0.79, 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)
......

......

clear_shape_model (ModelID)
  1. 文件句柄
    打开文件句柄,需要清除
open_file ('standard', 'output', FileHandle)
......

......

close_file (FileHandle)

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

Original: https://blog.csdn.net/qq_43376782/article/details/121822216
Author: 手写不期而遇
Title: Halcon句柄操作

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/641130/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球