Halcon基础知识点及其算子用法

Halcon基础知识

*快捷键:

cpp 复制代码
*// 注释的符号是*
*// F1--打开当前算子对应的帮助文档
*// F2--程序重置:清空运行过程中定义 / 生成的变量值,恢复至未启动初始状态,光标自动定位到第一行代码处
*// F3--激活选中程序行:取消选中代码的注释状态,程序自动定位至上次未运行位置或最新修改位置
*// F4--注释选中程序行:对选中的代码块添加注释标记,使其暂不参与程序执行
*// F5--运行全部程序:无断点时执行至程序结束;遇到断点或 stop() 语句则自动暂停
*// F6--单步执行(逐行跳过):逐行运行代码,遇自定义函数 / 算子时仅执行整体逻辑,不进入内部调试
*// F7--单步执行(逐行跳入):逐行运行代码,遇自定义函数 / 算子时进入其内部,用于调试深层逻辑
*// F8-- 单步跳出:从当前执行的函数 / 算子内部退出,回到调用该函数的下一行代码继续执行
*// F9--强制停止执行:终止当前正在运行的函数或程序进程
*// F10--断点设置 / 取消:在光标所在行标记断点;再次按下则取消该行的断点标记

*运算符:

cpp 复制代码
*// 算术运算符: +(加)、-(减)、*(乘)、/(除)%(取余,返回除法运算的余数), 无自增(++)、自减(--)运算符

*// 逻辑运算符: 
*//逻辑与:and(所有条件均满足时结果为真)
*//逻辑或:or(任意一个条件满足时结果为真)
*//逻辑非:not(对条件结果取反)
*//逻辑异或:xor(仅当其中一个条件满足、其余条件不满足时结果为真,多条件下不可同时满足)
*//数值对应:布尔值「真」对应数值 1,「假」对应数值 0

*// 赋值运算符: =(将右侧值赋给左侧变量), 无复合赋值运算符(如+=、-=、*=、/=均不支持)

*// 比较运算符:
*//大于:>、小于:<、大于等于:>=、小于等于:<=
*//等于:= / ==(两个符号均可用于判断左右两侧值是否相等)
*//不等于:!= / #(两个符号均可用于判断左右两侧值是否不相等

*算子读取照片:

•读取照片:read_image ()
•读取多张照片:list_files()
cs 复制代码
*// 读取一张图片//---------------------
*// 参数1 读取之后图片存储的变量名
*// 参数2 是图片的路径 (printer_chip/printer_chip_01是相对路径)
read_image (Image, 'printer_chip/printer_chip_01')
read_image (Image1, 'C:/Users/ZN/AppData/Roaming/MVTec/HALCON-23.05-Progress/examples/images/pipe_wrench/pipe_wrench_1.png')
*// ROI的代码//---------------------
gen_rectangle1 (ROI_0, 38.4831, 332.403, 309.669, 491.657)  
*// 定义一个变量//---------------------
x:=200
    
*// 加载多张图片1//---------------------
for Index := 1 to 5 by 1
    read_image (Image, 'printer_chip/printer_chip_0'+Index)
    stop ()
endfor
    
*// 读取多张图片2//---------------------
*// list_files 展示文件列表的算子
*// Files 输出参数 文件路径的集合
list_files ('D:/ChuanDingZN/全部学习记录/笔记/tupainji', 'files', Files) 
*// 遍历找到的所有图片//---------------------
for Index := 0 to |Files|-1 by 1
    read_image (Image,Files[Index])
endfor

*使用助手读取照片:

•单张照片
•多张照片
cs 复制代码
* Image Acquisition 02: Code generated by Image Acquisition 02
*// ImageFiles元组内存入的是文件的绝对路径
list_files ('C:/Users/ZN/AppData/Roaming/MVTec/HALCON-23.05-Progress/examples/images/ampoules', ['files','follow_links'], ImageFiles)

*// 通过正则筛选想要文件条件:筛选只要想要图形文件,忽略大小写 把复合条件的文件存入到到ImageFiles元祖中
*// ima|hobj:独有的文件类型
*// ignore_case:忽略大小写
tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)

*// 通过for循环,借助索引读取元组中存储的每一个图像文件
for Index := 0 to |ImageFiles| - 1 by 1
     *//加载图像
    read_image (Image, ImageFiles[Index])
    * Image Acquisition 02: Do something
endfor

*保存图像:

•直接保存原始图像:write_image()
•获取窗体句柄:dev_get_window()
•复制窗口图像生成一个图像变量:dump_window_image()
•直接保存窗口内容到文件:dump_window()
•截取图像中部分区域进行保存:crop_part()
cs 复制代码
*// Halcon保存图像

*// 获取图片
read_image (Image, 'printer_chip/printer_chip_01')

*// 第一种方式: 选中图形窗口-->右键-->保存窗口

*// 第二种方式: 使用write_image算子直接保存原始图像
*// 保存原始图像数据(无窗口标注/绘制元素,仅图像本身)
*// 参数1 Image:输入参数,待保存的原始图像对象
*// 参数2 'tiff':输入参数,保存格式(支持tiff/jpg/png/bmp等,区分大小写)
*// 参数3 0:输入参数,保存质量(0=默认质量;jpg格式可设1-9,9=最高质量)
*// 参数4 输入参数,保存路径+文件名
write_image (Image, 'tiff', 0, 'D:/ChuanDingZN/全部学习记录/新/Halcon/day03/2.算子保存')

*// 获取窗口句柄
dev_get_window (WindowHandle)

*// 复制窗口图像生成一个图像变量
*// 将窗口显示内容(含绘制元素)复制为图像变量
*// 参数1 Image1:输出参数,窗口内容对应的图像变量
*// 参数2 WindowHandle:输入参数,目标窗口句柄
dump_window_image (Image1,WindowHandle )

*// 直接保存窗口内容到文件 默认是保存到类文件同级路径 (例程同级别目录)
*// 参数1 WindowHandle:输入参数,目标窗口句柄
*// 参数2 'tiff':输入参数,保存格式
*// 参数3 输入参数,保存路径+文件名
*// 备注:直接保存窗口截图,包含所有绘制元素,与窗口显示效果完全一致
dump_window (WindowHandle, 'tiff', 'D:/ChuanDingZN/全部学习记录/新/Halcon/day03/3.halcon_dump')

*// 截取图像中部分区域进行保存  生成一个图形变量
*// 参数1 Image1:输入参数,原始图像(此处为窗口复制的图像)
*// 参数2 ImagePart:输出参数,截取后的区域图像
*// 参数3 20:输入参数,截取区域的起始行坐标(Row,垂直方向偏移)
*// 参数4 150:输入参数,截取区域的起始列坐标(Column,水平方向偏移)
*// 参数5 50:输入参数,截取区域的宽度(水平方向像素数)
*// 参数6 260:输入参数,截取区域的高度(垂直方向像素数)
*// 备注:坐标规则:Row越大越靠下,Column越大越靠右,需确保区域在图像范围内
crop_part (Image1, ImagePart, 20, 150, 50, 260)

*图片预处理分割:

•阈值分割:threshold ()
•连通器:connection ()
•筛选:select_shape()
cs 复制代码
*// 读取一张图片
*// 参数1 读取之后图片存储的变量名
*// 参数2 是图片的路径 
read_image (Image, 'clip')

*// 1阈值分割 就是斑点分析工具
*// 参数2 Region 分割之后的区域
*// 参数3、4 提取区域阈值范围
threshold (Image, Region, 10, 119)

*// 2连通器区域 该分开的分开该合并的合并
*// 参数1 Region 连通的区域
*// 参数2 ConnectedRegions 连通之后的区域,分开之后的区域
connection (Region, ConnectedRegions)

*// 3根据筛选条件进行筛选
*// 参数1 ConnectedRegions 进行筛选的目标区域
*// 参数2 SelectedRegions 根据条件筛选之后的区域
*// 参数3 area 筛选条件是面积
*// 参数4 and 并且
*// 参数5、6 6000, 99999 面积最小值和最大值
select_shape (ConnectedRegions, SelectedRegions1, 'area', 'and', 3960, 8500)
*select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 6000, 99999)

希望对大家有所帮助, 感谢大家的关注和点赞。

相关推荐
温柔只给梦中人14 小时前
深度学习:day03-04
人工智能·深度学习
大厂技术总监下海14 小时前
数据湖加速、实时数仓、统一查询层:Apache Doris 如何成为现代数据架构的“高性能中枢”?
大数据·数据库·算法·apache
棒棒的皮皮14 小时前
【深度学习】YOLO 模型部署全攻略(本地 / 嵌入式 / 移动端)
人工智能·深度学习·yolo·计算机视觉
a程序小傲14 小时前
小红书Java面试被问:TCC事务的悬挂、空回滚问题解决方案
java·开发语言·人工智能·后端·python·面试·职场和发展
hetao173383714 小时前
2026-01-06 hetao1733837 的刷题笔记
c++·笔记·算法
a努力。14 小时前
国家电网Java面试被问:最小生成树的Kruskal和Prim算法
java·后端·算法·postgresql·面试·linq
知行合一。。。14 小时前
Python--03--函数入门
android·数据库·python
竹君子14 小时前
AIDC知识库(3)英伟达Rubin 架构对未来AIDC方案的影响初探
人工智能
朝九晚五ฺ14 小时前
从零到实战:鲲鹏平台 HPC 技术栈与并行计算
java·开发语言