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)

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

相关推荐
不懂的浪漫1 分钟前
把 AI Skill 做成系统:路由、领域技能、自我复盘和进化飞轮
人工智能·ai·skill
等风来不如迎风去8 分钟前
【win11】最佳性能:fix 没有壁纸,一直黑屏
网络·人工智能
AI科技星8 分钟前
全域数学·72分册:场计算机卷【乖乖数学】
算法·机器学习·数学建模·数据挖掘·量子计算
云云只是个程序马喽11 分钟前
AI漫剧创作系统开发定制指南
人工智能·小程序·php
Alice-YUE25 分钟前
【js高频八股】防抖与节流
开发语言·前端·javascript·笔记·学习·ecmascript
云泽80830 分钟前
C++11 核心特性全解:列表初始化、右值引用与移动语义实战
开发语言·c++
Elastic 中国社区官方博客30 分钟前
Elastic 和 Cursor 合作 加速 上下文工程 与 coding agents
大数据·人工智能·elasticsearch·搜索引擎·全文检索
迦南的迦 亚索的索31 分钟前
AI_12_Dify_平台介绍
人工智能
HIT_Weston35 分钟前
68、【Agent】【OpenCode】用户对话提示词(任务执行流程)
人工智能·agent·opencode
froginwe111 小时前
DOM 加载函数
开发语言