当前位置: 首页 > news >正文

Halcon HDevelop 核心语法与实战笔记

一、图像处理基础流程(区域分析示例)

read_image (Clip, 'clip.png')          // 读取图像(需确保'clip.png'在可访问路径)
threshold (Clip, Regions, 0, 100)     // 阈值分割:提取灰度值0~100的像素区域
connection(Regions, ConnectedRegions) // 连通域分析:将区域分割为独立连通对象
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 5000, 9000)  // 按面积筛选

关键说明

  • threshold 是分割前景与背景的核心算子,阈值范围需根据图像灰度分布调整(可在 HDevelop 中通过灰度直方图工具可视化调整)。

  • connection 将相邻像素组成的区域拆分为独立对象,便于后续逐个分析。

  • select_shape 支持按面积、周长、圆度等多种特征筛选,此处保留面积 5000~9000 的区域(排除过小噪声和过大干扰)。

二、Halcon 基础语法规则

1. 变量与赋值

x:=10                  // 数值赋值(使用 := 而非 =,= 用于条件判断)
s:='aaa'               // 字符串用单引号包裹,支持重新赋值
s:='A'                 // 覆盖原有字符串值

与 C# 对比:C# 用=赋值,Halcon 严格区分:=(赋值)和=(判断)。

2. 条件判断语句

// 等于与不等于判断
if(x=11)               // x等于11时执行x:=666 
endif
​
if(x#11)               // x不等于11时执行(# 对应C#的 !=)x:=666 
endif  
​
// 逻辑运算
if (x<6 and s='A')     // 逻辑与(and 对应C#的 &&)
endif
​
if (x<6 or s='A')      // 逻辑或(or 对应C#的 ||)
endif
​
if (not(x=10))         // 逻辑非(not() 对应C#的 !)
endif

3. 循环与分支结构

(1)for 循环
a:=100
for Index := 1 to 5 by 1  // 初始值1,终止值5,步长1(类似C#的for(int i=1;i<=5;i++))a:=a+10              // 循环结束后a=150
endfor
(2)while 循环
while (x)  // 条件为x非0时持续执行(需在循环内修改x避免死循环)
endwhile
(3)switch 分支
switch (x)case 1:a:=666break  // 跳出分支case 5:a:=8888break
endswitch

三、核心数据类型及操作

1. 句柄(Handle)

dev_get_window (WindowHandle)  // 获取当前窗口句柄(唯一标识,类似指针)

作用:句柄用于引用复杂对象(窗口、相机、模型等),通过句柄高效操作资源,避免数据拷贝。

2. 图像、区域与轮廓

// 图像(Image):像素矩阵
read_image (Image, 'printer_chip/printer_chip_01')  // 读取内置示例图像
​
// 区域(Region):像素集合
gen_rectangle1 (Rectangle, 30, 20, 200, 200)  // 生成矩形区域(参数:左上角行、列,右下角行、列)
​
// 轮廓(XLD):亚像素精度几何图形
gen_circle_contour_xld (ContCircle, 400, 400, 100, 0, 6.28318, 'positive', 1)
// 参数:中心行、列,半径,起始角(0弧度),终止角(2π弧度),方向,采样步长

3. 元组(Tuple,动态数组)

(1)基础操作
nums:=[1,2,3,3,1]       // 定义元组
x:=nums[1]              // 索引访问(取第2个元素,值为2)
nums[3]:=111            // 修改元素(第4个元素变为111)
len:=|nums|             // 元组长度(结果为5)
(2)批量生成
nums1:=[0:10]           // 生成0~10连续整数(步长1)
nums2:=[10:2:100]       // 生成10~100,步长2(10,12,...,98)
nums3:=[100:-2:10]      // 生成100~10,步长-2(100,98,...,10)
(3)集合运算
list1:=[1,2,3]
list2:=[4,-5,6]
list3:=list1+list2       // 元素对应相加(结果[5,-3,9])
list3:=[list1,list2]     // 拼接元组(结果[1,2,3,4,-5,6])
tuple_union (list1, list2, Union)  // 并集(结果[1,2,3,4,-5,6])
n:=abs(Union)            // 取绝对值(结果[1,2,3,4,5,6])
list6:=subset(list1,0)   // 取索引0的元素(结果[1])
list7:=remove(Union,3)   // 移除索引3的元素(结果[1,2,3,-5,6])

四、批量图像处理实战

// 列出文件夹中的所有图像文件
list_files ('C:/.../images/boxes', 'files', Files)  // 替换为实际路径// 遍历并显示所有图像
for Index := 0 to |Files| -1 by 1read_image (Image1, Files[Index])  // 读取第Index个图像dev_open_window (0, 0, 512, 512, 'black', WindowHandle)  // 创建512x512窗口dev_display (Image1)               // 显示图像dev_close_window ()                // 关闭当前窗口dev_clear_window ()                // 清除窗口缓存
endfor

应用场景:适用于批量浏览图像、统一预处理(如尺寸调整、滤波)等场景,通过元组长度|Files|控制循环次数。

五、HDevelop 使用技巧

  1. 算子提示:输入算子名后按Tab自动补全参数,按F1查看官方文档。

  2. 调试工具:单步执行(F6)、断点设置(双击行号),在变量窗口实时查看数据变化。

  3. 图像路径:内置示例图像路径通常为C:\Users\Public\Documents\MVTec\HALCON-版本号\examples\images

通过以上内容,可掌握 Halcon 的核心语法与图像处理基础流程,为复杂视觉项目开发奠定基础。

http://www.dtcms.com/a/613843.html

相关文章:

  • 网站开发需要的资料高级网站开发工程师工资
  • (6)框架搭建:Qt实战项目之主窗体工具条
  • 购物网站建设和使用东莞公司展厅设计公司
  • Android协程 vs. 传统线程/线程池:现代化异步编程的演进
  • 【编程】脚本编写入门:从零到一的自动化之旅
  • 自动化测试用例编写详解
  • ASC学习笔记0017:返回此能力系统组件的所有属性列表
  • Python可迭代对象讲解
  • 开源项目分享:Gitee热榜项目 2025年11月第三周 周榜
  • 哪里可做网站优化推广网站seo
  • Java Web 项目中Maven 常用库
  • 私人做网站图片网络科技有限公司怎么挣钱
  • 人力资源网站怎么做网络维护是什么职业
  • 体育直播/赛事直播/电竞直播/游戏直播/录播转播/原生APP/赛程比分系统
  • 学Java第四十五天——斗地主小游戏创作
  • 怎样创建一个国际网站wordpress外观菜单
  • 【总结】计网 IPv6
  • 【动态高斯重建】论文集合:从4DGT到OMG4、4DSioMo
  • 【ASR论文】Zipformer:更快、更强的语音识别编码器 | 小米公司
  • 从零开始学二叉树(上):树的初识 —— 从文件系统到树的基本概念
  • wordpress做网站卡吗服装企业 北京 网站建设
  • wordpress站点地址没更改wordpress 百秀主题
  • Foreign Function Interface
  • 在线C语言编译器 | 提供快速高效的C语言编程环境
  • 11月15日星期六今日早报简报微语报早读
  • 发电机组和负荷模型
  • 手机版 网站建设新闻今天
  • 节流throttle防抖debounce的函数封装
  • CSS 网格元素:构建现代网页布局的基石
  • 屹晶微 EG2134 三相独立半桥驱动芯片技术解析