介绍
Halcon 的算子(operators)按照功能被系统性地划分为多个类别,官方文档中目前(Halcon 22.11 版本)共有 19 个主分类,每个主分类下还有若干子分类。
本人在此对这19个分类的常用核心算子进行了一系列的总结,且本人在文章最后还总结了一些案例经验。
注意:
- 跨分类调用:某些算子可能在多个分类中,但官方文档中会明确其主分类。
- 例如: read_image(文件操作)常被其他分类(如图像处理)的示例调用,但其核心功能是文件读取。
以下目录读者可根据目录进行查找想要了解或学习的算子:
目录
一. 图像采集(Acquisition)
设备控制
open_framegrabber - 初始化采集设备
close_framegrabber - 释放设备资源
图像获取
grab_image - 同步抓取单帧
grab_image_async - 异步抓取单帧
参数配置
set_framegrabber_param - 设置设备参数
get_framegrabber_param - 查询设备参数
高级功能
grab_data - 同步获取图像及附加数据
info_framegrabber - 查询设备信息
二.图像处理
1. 图像预处理
mean_image - 均值滤波
gauss_image - 高斯滤波
2. 图像分割
threshold - 全局阈值分割
dyn_threshold - 动态阈值分割
3. 特征提取
edges_image - 边缘检测
smallest_rectangle1 - 获取外接矩形
4. 形态学处理
dilation_rect - 矩形膨胀
erosion_circle - 圆形腐蚀
5. 模板匹配
create_shape_model - 创建形状模板
find_shape_model - 形状匹配
三.图像分割
threshold - 全局阈值分割
binary_threshold - 自动阈值分割
dyn_threshold - 动态阈值分割
watersheds - 分水岭分割
regiongrowing - 区域生长分割
connection - 连通区域分析
select_shape - 形状筛选
四.特征提取
区域特征提取
area_center - 计算区域面积和中心坐标
smallest_rectangle1 - 获取最小外接矩形
smallest_rectangle2 - 获取带角度外接矩形
elliptic_axis - 计算椭圆参数
边缘特征提取
edges_sub_pix - 亚像素边缘检测
line_gauss - 亚像素直线检测
circle_pose - 圆检测
灰度特征提取
gray_features - 灰度特征计算
intensity - 灰度统计
纹理特征提取
texture_laws - 纹理滤波
entropy_image - 熵图像计算
五.模板匹配
1. 基于形状的模板匹配
create_shape_model - 创建形状模板
find_shape_model - 形状匹配
2. 基于NCC的模板匹配
create_ncc_model - 创建NCC模板
find_ncc_model - NCC匹配
3. 基于组件的模板匹配
create_component_model - 创建组件模型
find_component_model - 组件匹配
4. 3D模板匹配
create_surface_model - 创建3D表面模型
find_surface_model - 3D表面匹配
5. 变形模板匹配
create_local_deformable_model - 创建可变形模板
find_local_deformable_model - 变形模板匹配
六.测量技术
1. 一维测量
measure_pos - 边缘位置测量
measure_pairs - 边缘对测量
2. 二维测量
smallest_rectangle2 - 最小外接矩形测量
elliptic_axis - 椭圆参数测量
3. 几何关系测量
distance_pp - 点对点距离
angle_ll - 线线夹角
4. 亚像素测量
edges_sub_pix - 亚像素边缘检测
line_gauss - 亚像素直线测量
5. 3D测量
xyz_to_object_model_3d - 3D点云生成
fit_primitives_object_model_3d - 3D几何体拟合
七.3D视觉
1. 3D数据采集
read_object_model_3d - 读取3D模型文件
connect_to_object_model_3d_device - 连接3D相机
2. 3D数据处理
xyz_to_object_model_3d - 点云生成
sample_object_model_3d - 点云采样
3. 3D特征提取
surface_normals_object_model_3d - 表面法线计算
find_surface_model - 3D表面匹配
4. 3D测量
fit_primitives_object_model_3d - 几何体拟合
distance_object_model_3d - 3D距离计算
5. 3D重建
binocular_disparity - 双目视差计算
reconstruct_surface_stereo - 立体表面重建
八.条码与OCR
1. 条码识别
create_bar_code_model - 创建条码模型
find_bar_code - 查找并解码条码
get_bar_code_param - 获取条码参数
2. 二维码识别
create_data_code_2d_model - 创建二维码模型
find_data_code_2d - 查找并解码二维码
3. OCR识别
create_ocr_class_mlp - 创建OCR分类器
do_ocr_multi_class_mlp - 多字符OCR识别
find_text - 文本区域检测
4. 文本模型处理
create_text_model_reader - 创建文本阅读器模型
find_text_reader - 文本识别
get_text_result_reader - 获取识别结果
九.深度学习
1. 模型管理
read_dl_model - 读取预训练模型
create_dl_model_detection - 创建检测模型
2. 数据处理
gen_dl_samples_from_images - 生成样本
preprocess_dl_samples - 样本预处理
3. 模型训练
train_dl_model - 训练模型
evaluate_dl_model - 模型评估
4. 推理预测
apply_dl_model - 应用模型推理
get_dl_model_param - 获取模型参数
5. 结果处理
get_dl_sample_result - 获取样本结果
visualize_dl_samples - 可视化结果
十.图形显示核心算子介绍
dev_open_window - 打开图形窗口
dev_display - 显示图像对象
dev_set_color - 设置显示颜色
disp_text - 显示文本
disp_rectangle1 - 显示矩形
disp_region - 显示区域
十一.文件操作
read_image - 读取图像文件
write_image - 保存图像文件
list_files - 列出目录文件
read_ocr_trainf - 读取OCR训练文件
write_ocr_trainf - 保存OCR训练数据
read_contour_xld_arc_info - 读取XLD轮廓文件
write_contour_xld_arc_info - 保存XLD轮廓
read_shape_model - 读取形状模板
write_shape_model - 保存形状模板
file_exists - 检查文件是否存在
delete_file - 删除文件
十二.控制系统
程序流程控制
stop - 停止程序执行
exit - 退出程序
continue - 继续循环
break - 中断循环
错误处理
try / catch / endtry - 异常处理
throw - 抛出异常
定时控制
count_seconds - 获取系统时间
wait_seconds - 暂停执行
系统控制
set_system - 设置系统参数
get_system - 获取系统参数
reset_obj_db - 重置对象数据库
十三.数学运算
基础算术运算
add - 加法运算
sub - 减法运算
mult - 乘法运算
div - 除法运算
统计运算
min_max_gray - 灰度值极值统计
intensity - 区域灰度统计
area_center - 区域面积和中心
几何变换
hom_mat2d_identity - 创建单位矩阵
hom_mat2d_rotate - 旋转矩阵
hom_mat2d_translate - 平移矩阵
逻辑运算
union1 - 区域合并
intersection - 区域交集
complement - 区域补集
十四.系统操作
系统信息与控制
get_system - 获取系统参数
set_system - 设置系统参数
内存管理
reset_obj_db - 重置对象数据库
clear_obj - 清除特定对象
并行计算控制
set_operator_timeout - 设置操作超时
get_operator_timeout - 获取当前超时设置
系统状态查询
count_relation - 统计对象数量
get_handle_info - 获取句柄信息
多线程控制
par_start - 启动并行操作
par_join - 等待线程结束
十五.元组操作
元组创建与初始化
tuple_gen_const - 生成常量元组
tuple_rand - 生成随机元组
元组基本操作
tuple_length - 获取元组长度
tuple_concat - 连接元组
元组元素访问
tuple_select - 选择元组元素
tuple_find - 查找元素位置
元组数学运算
tuple_add - 元组加法
tuple_mult - 元组乘法
元组逻辑运算
tuple_and - 逻辑与运算
tuple_not - 逻辑非运算
元组排序与统计
tuple_sort - 元组排序
tuple_max - 求最大值
元组类型转换
tuple_number - 转换为数字元组
tuple_string - 转换为字符串元组
十六.对象操作
对象创建与生成
gen_empty_obj - 创建空对象
gen_region_points - 从点生成区域
对象复制与转换
copy_obj - 复制对象
obj_to_integer - 对象转整数
对象连接与分离
concat_obj - 连接对象数组
select_obj - 选择对象元素
对象信息获取
count_obj - 统计对象数量
get_obj_class - 获取对象类型
对象比较与测试
test_equal_obj - 测试对象相等性
test_subset_region - 测试区域包含关系
对象几何变换
affine_trans_region - 仿射变换区域
zoom_region - 区域缩放
对象可视化
get_obj_info - 获取对象信息
十七.开发工具
程序调试与分析
dev_disp_text - 调试文本显示
dev_error_var - 获取错误变量
性能分析工具
count_seconds - 精确计时
profile_operations - 操作性能分析
代码生成工具
export_procedure - 导出过程
gen_cpp_code - 生成C++代码
交互式开发工具
inspect_shape_model - 形状模板检查
dev_inspect_ctrl - 控制变量检查
自动化测试工具
test_equal_obj - 对象相等性测试
assert - 断言检查
代码优化工具
optimize_direct - 直接优化模式
get_operator_precedence - 获取算子优先级
十八.通信算子分类
设备通信接口
open_framegrabber - 打开图像采集设备
close_framegrabber - 关闭采集设备
工业通信协议
opc_ua_read_node - OPC UA读取
modbus_read_holding_registers - Modbus读取
网络通信
socket_connect - 建立Socket连接
socket_send_data - Socket发送数据
串口通信
serial_open - 打开串口
serial_read_line - 读取串口数据
数据交换接口
set_window_param - 设置窗口参数
get_window_param - 获取窗口参数
工业相机控制
set_framegrabber_param - 设置采集参数
grab_image_async - 异步采集图像
十九.标定算子分类
相机标定
create_calib_data - 创建标定数据模型
set_calib_data_calib_object - 设置标定板参数
find_calib_object - 查找标定板
calibrate_cameras - 执行相机标定
手眼标定
create_hand_eye_calib_data - 创建手眼标定模型
set_hand_eye_calib_data - 设置标定数据
calibrate_hand_eye - 执行手眼标定
标定结果应用
get_calib_data - 获取标定结果
change_radial_distortion_image - 图像畸变校正
标定板生成
gen_caltab - 生成标定板描述文件
create_caltab - 创建标定板图像
实战案例
案例1:二维码识别
案例2:尺寸测量
实战应用流程经验分享
1. 标准检测流程
2. 高精度匹配流程
3. 深度学习流程
最佳实践建议
重要说明:
一. 图像采集(Acquisition)
设备控制
open_framegrabber - 初始化采集设备
-
语法
open_framegrabber(Name, [通用参数], AcqHandle)
-
示例
open_framegrabber('GigEVision', 0, 0, 0, 0, 0, 0, 'progressive', -1, 'default', -1, 'false', 'default', 'default', 0, -1, AcqHandle)
close_framegrabber - 释放设备资源
-
语法
close_framegrabber(AcqHandle)
图像获取
grab_image - 同步抓取单帧
-
语法
grab_image(Image, AcqHandle)
grab_image_async - 异步抓取单帧
-
语法
grab_image_async(Image, AcqHandle, MaxDelay)
-
示例
grab_image_async(Image, AcqHandle, 3.0) // 设置3秒超时
参数配置
set_framegrabber_param - 设置设备参数
-
常用参数
'exposure'
(曝光),'gain'
(增益),'trigger_mode'
(触发模式) -
示例
set_framegrabber_param(AcqHandle, 'exposure', 5000) // 设置5ms曝光
get_framegrabber_param - 查询设备参数
-
语法
get_framegrabber_param(AcqHandle, Param, Value)
高级功能
grab_data - 同步获取图像及附加数据
-
语法
grab_data(Image, Region, Contours, AcqHandle, Data)
info_framegrabber - 查询设备信息
-
语法
info_framegrabber(Name, Query, Information, ValueList)
二.图像处理
1. 图像预处理
mean_image - 均值滤波
-
语法
mean_image(Image, ImageMean, MaskWidth, MaskHeight)
-
示例
mean_image(Image, ImageMean, 5, 5) // 5x5均值滤波
gauss_image - 高斯滤波
-
语法
gauss_image(Image, ImageGauss, Size)
-
示例
gauss_image(Image, ImageGauss, 3) // 3x3高斯滤波
2. 图像分割
threshold - 全局阈值分割
-
语法
threshold(Image, Region, MinGray, MaxGray)
-
示例
threshold(Image, Region, 100, 255) // 提取100-255灰度区域
dyn_threshold - 动态阈值分割
-
语法
dyn_threshold(OrigImage, ThresholdImage, RegionDynThresh, Offset, LightDark)
-
示例
dyn_threshold(Image, ImageMean, Region, 10, 'dark') // 提取比背景暗10以上的区域
3. 特征提取
edges_image - 边缘检测
-
语法
edges_image(Image, ImaAmp, ImaDir, Filter, Alpha, NMS, Low, High)
-
示例
edges_image(Image, ImaAmp, ImaDir, 'canny', 1.0, 'nms', 20, 40) // Canny边缘检测
smallest_rectangle1 - 获取外接矩形
-
语法
smallest_rectangle1(Regions, Row1, Column1, Row2, Column2)
-
示例
smallest_rectangle1(Region, Row1, Col1, Row2, Col2) // 获取区域外接矩形坐标
4. 形态学处理
dilation_rect - 矩形膨胀
-
语法
dilation_rect(Region, RegionDilation, Width, Height)
-
示例
dilation_rect(Region, RegionDilation, 3, 3) // 3x3矩形膨胀
erosion_circle - 圆形腐蚀
-
语法
erosion_circle(Region, RegionErosion, Radius)
-
示例
erosion_circle(Region, RegionErosion, 2.5) // 半径2.5的圆形腐蚀
5. 模板匹配
create_shape_model - 创建形状模板
-
语法
create_shape_model(Template, NumLevels, AngleStart, AngleExtent, AngleStep, Optimization, Contrast, MinContrast, ModelID)
-
示例
create_shape_model(ImageReduced, 4, 0, rad(360), 'auto', 'none', 'use_polarity', 10, ModelID)
find_shape_model - 形状匹配
-
语法
find_shape_model(Image, ModelID, AngleStart, AngleExtent, MinScore, NumMatches, MaxOverlap, SubPixel, NumLevels, ResultRow, ResultColumn, ResultAngle, ResultScore)
-
示例
find_shape_model(Image, ModelID, 0, rad(360), 0.7, 1, 0.5, 'least_squares', 0, Row, Column, Angle, Score)
三.图像分割
threshold - 全局阈值分割
-
语法
threshold(Image : Region : MinGray, MaxGray : )
-
示例
threshold(Image, Region, 100, 255) // 提取灰度值100-255的区域
binary_threshold - 自动阈值分割
-
语法
binary_threshold(Image : Region : Method, LightDark : UsedThreshold)
-
示例
binary_threshold(Image, Region, 'max_separability', 'dark', Threshold) // 自动计算最佳阈值
dyn_threshold - 动态阈值分割
-
语法
dyn_threshold(OrigImage, ThresholdImage : RegionDynThresh : Offset, LightDark : )
-
示例
mean_image(Image, Mean, 31, 31) dyn_threshold(Image, Mean, Region, 10, 'dark') // 基于局部均值的动态阈值
watersheds - 分水岭分割
-
语法
watersheds(Image : Basins, Watersheds : : )
-
示例
watersheds(Image, Basins, Watersheds) // 分水岭算法分割图像
regiongrowing - 区域生长分割
-
语法
regiongrowing(Image : Regions : Row, Column, Tolerance, MinSize : )
-
示例
regiongrowing(Image, Regions, 100, 100, 5, 100) // 从(100,100)开始生长,容差5,最小区域100像素
connection - 连通区域分析
-
语法
connection(Region : ConnectedRegions : : )
-
示例
connection(Region, ConnectedRegions) // 将输入区域分割为连通区域
select_shape - 形状筛选
-
语法
select_shape(Regions : SelectedRegions : Features, Operation, Min, Max : )
-
示例
select_shape(ConnectedRegions, LargeRegions, 'area', 'and', 500, 99999) // 筛选面积500以上的区域
四.特征提取
区域特征提取
area_center - 计算区域面积和中心坐标
-
语法
area_center(Regions : : Area, Row, Column)
-
示例
area_center(ConnectedRegions, Area, Row, Column) // 获取各连通区域的面积和中心
smallest_rectangle1 - 获取最小外接矩形
-
语法
smallest_rectangle1(Regions : : Row1, Column1, Row2, Column2)
-
示例
smallest_rectangle1(Region, Row1, Col1, Row2, Col2) // 获取区域的外接矩形坐标
smallest_rectangle2 - 获取带角度外接矩形
-
语法
smallest_rectangle2(Regions : : Row, Column, Phi, Length1, Length2)
-
示例
smallest_rectangle2(Region, Row, Col, Phi, L1, L2) // 获取带旋转角度的外接矩形参数
elliptic_axis - 计算椭圆参数
-
语法
elliptic_axis(Regions : : Ra, Rb, Phi)
-
示例
elliptic_axis(Region, MajorAxis, MinorAxis, Angle) // 获取拟合椭圆的参数
边缘特征提取
edges_sub_pix - 亚像素边缘检测
-
语法
edges_sub_pix(Image : Edges : Filter, Alpha, Low, High : )
-
示例
edges_sub_pix(Image, Edges, 'canny', 1.0, 20, 40) // Canny算子亚像素边缘检测
line_gauss - 亚像素直线检测
-
语法
line_gauss(Image : Lines : Sigma, Low, High, LightDark, Extend, Complete : )
-
示例
line_gauss(Image, Lines, 1.5, 5, 8, 'dark', 'true', 'true') // 高斯直线检测
circle_pose - 圆检测
-
语法
circle_pose(Image : : Radius, Percent, WindowSize, Threshold, MeasureSelect, MeasureTransition, MeasureSigma, MeasureLength, MeasureNumber, MeasureScore, MeasureDistance, MeasureInterpolation : Row, Column, Radius, StartPhi, EndPhi, PointOrder)
-
示例
circle_pose(Image, 50, 60, 10, 10, 'all', 'all', 1.0, 20, 5, 0.5, 3.0, 'bicubic', Row, Column, Radius, StartPhi, EndPhi, PointOrder) // 精确圆检测
灰度特征提取
gray_features - 灰度特征计算
-
语法
gray_features(Regions, Image : : Features : Value)
-
示例
gray_features(Region, Image, 'mean', MeanValue) // 计算区域平均灰度值
intensity - 灰度统计
-
语法
intensity(Regions, Image : : Mean, Deviation)
-
示例
intensity(Region, Image, Mean, Dev) // 计算区域灰度均值和标准差
纹理特征提取
texture_laws - 纹理滤波
-
语法
texture_laws(Image : ImageTexture : FilterTypes, Shift, FilterSize : )
-
示例
texture_laws(Image, Texture, 'el', 2, 5) // 使用Laws纹理滤波器
entropy_image - 熵图像计算
-
语法
entropy_image(Image : ImageEntropy : Width, Height : )
-
示例
entropy_image(Image, Entropy, 7, 7) // 计算7x7窗口的局部熵
五.模板匹配
1. 基于形状的模板匹配
create_shape_model - 创建形状模板
-
语法
create_shape_model(Template : : NumLevels, AngleStart, AngleExtent, AngleStep, Optimization, Contrast, MinContrast : ModelID)
-
示例
create_shape_model(ImageReduced, 4, 0, rad(360), 'auto', 'none', 'use_polarity', 10, ModelID) // 创建360度可旋转模板
find_shape_model - 形状匹配
-
语法
find_shape_model(Image : : ModelID, AngleStart, AngleExtent, MinScore, NumMatches, MaxOverlap, SubPixel, NumLevels : Row, Column, Angle, Score)
-
示例
find_shape_model(Image, ModelID, 0, rad(360), 0.7, 1, 0.5, 'least_squares', 0, Row, Column, Angle, Score) // 搜索最佳匹配
2. 基于NCC的模板匹配
create_ncc_model - 创建NCC模板
-
语法
create_ncc_model(Template : : NumLevels, AngleStart, AngleExtent, AngleStep : ModelID)
-
示例
create_ncc_model(ImageReduced, 4, 0, rad(360), 'auto', ModelID) // 创建归一化互相关模板
find_ncc_model - NCC匹配
-
语法
find_ncc_model(Image : : ModelID, AngleStart, AngleExtent, MinScore, NumMatches, MaxOverlap, SubPixel : Row, Column, Angle, Score)
-
示例
find_ncc_model(Image, ModelID, 0, rad(360), 0.7, 1, 0.5, 'true', Row, Column, Angle, Score) // NCC匹配搜索
3. 基于组件的模板匹配
create_component_model - 创建组件模型
-
语法
create_component_model(Template : : RootRanking, ContrastLow, ContrastHigh, MinSize, MaxSize, AngleStart, AngleExtent, AngleStep, Optimization, Metric : ModelID)
-
示例
create_component_model(ImageReduced, 'area', 10, 30, 5, 1000, 0, rad(360), 'auto', 'none', 'use_polarity', ModelID)
find_component_model - 组件匹配
-
语法
find_component_model(Image : : ModelID, RootComponent, AngleStart, AngleExtent, MinScore, NumMatches, MaxOverlap, IfRootNotFound, IfComponentNotFound, PosePrediction, MinScoreComp, SubPixel, NumLevels : Row, Column, Angle, Score, ComponentFound)
-
示例
find_component_model(Image, ModelID, 0, 0, rad(360), 0.7, 1, 0.5, 'stop', 'prune_branch', 0, 0.5, 'least_squares', 0, Row, Column, Angle, Score, CompFound)
4. 3D模板匹配
create_surface_model - 创建3D表面模型
-
语法
create_surface_model(ObjectModel3D : : RelSamplingDistance, KeyPointFraction, MinScore, ReturnResultHandle : SurfaceModelID)
-
示例
create_surface_model(ObjectModel3D, 0.05, 0.2, 0.5, 'false', SurfaceModelID)
find_surface_model - 3D表面匹配
-
语法
find_surface_model(SurfaceModelID, ObjectModel3D, Pose, MinScore, ReturnResultHandle, GenParamName, GenParamValue : Pose, Score, SurfaceMatchingResultID)
-
示例
find_surface_model(SurfaceModelID, SceneModel3D, [], 0.5, 'false', [], [], Pose, Score, ResultID)
5. 变形模板匹配
create_local_deformable_model - 创建可变形模板
-
语法
create_local_deformable_model(Template : : NumLevels, AngleStart, AngleExtent, AngleStep, ScaleMin, ScaleMax, ScaleStep, Optimization, Metric, Contrast, MinContrast, ParamName, ParamValue : ModelID)
-
示例
create_local_deformable_model(ImageReduced, 4, 0, rad(360), 'auto', 0.9, 1.1, 'auto', 'none', 'use_polarity', 10, [], [], ModelID)
find_local_deformable_model - 变形模板匹配
-
语法
find_local_deformable_model(Image : : ModelID, AngleStart, AngleExtent, ScaleMin, ScaleMax, MinScore, NumMatches, MaxOverlap, NumLevels, Greediness, ResultType, ParamName, ParamValue : Row, Column, Angle, Scale, Score, LocalDeformableModelResults)
-
示例
find_local_deformable_model(Image, ModelID, 0, rad(360), 0.9, 1.1, 0.7, 1, 0.5, 0, 0.8, 'deformed_contours', [], [], Row, Column, Angle, Scale, Score, Results)
六.测量技术
1. 一维测量
measure_pos - 边缘位置测量
-
语法
measure_pos(Image : : MeasureHandle, Sigma, Threshold, Transition, Select : RowEdge, ColumnEdge, Amplitude, Distance)
-
示例
measure_pos(Image, MeasureHandle, 1.0, 30, 'all', 'all', Rows, Cols, Amps, Dist) // 检测所有边缘
measure_pairs - 边缘对测量
-
语法
measure_pairs(Image : : MeasureHandle, Sigma, Threshold, Transition, Select : RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, IntraDistance, InterDistance)
-
示例
measure_pairs(Image, MeasureHandle, 1.0, 30, 'negative', 'all', R1, C1, A1, R2, C2, A2, IntraDist, InterDist) // 测量负向边缘对
2. 二维测量
smallest_rectangle2 - 最小外接矩形测量
-
语法
smallest_rectangle2(Regions : : Row, Column, Phi, Length1, Length2)
-
示例
smallest_rectangle2(Region, Row, Col, Angle, HalfLen1, HalfLen2) // 获取带角度矩形参数
elliptic_axis - 椭圆参数测量
-
语法
elliptic_axis(Regions : : Ra, Rb, Phi)
-
示例
elliptic_axis(Region, MajorAxis, MinorAxis, Angle) // 测量椭圆长/短轴和角度
3. 几何关系测量
distance_pp - 点对点距离
-
语法
distance_pp( : : Row1, Column1, Row2, Column2 : Distance)
-
示例
distance_pp(R1, C1, R2, C2, Dist) // 计算两点间距离
angle_ll - 线线夹角
-
语法
angle_ll( : : Row1, Column1, Row2, Column2, Row3, Column3, Row4, Column4 : Angle)
-
示例
angle_ll(R1, C1, R2, C2, R3, C3, R4, C4, Angle) // 计算两条线夹角
4. 亚像素测量
edges_sub_pix - 亚像素边缘检测
-
语法
edges_sub_pix(Image : Edges : Filter, Alpha, Low, High : )
-
示例
edges_sub_pix(Image, Edges, 'canny', 1.0, 20, 40) // Canny亚像素边缘
line_gauss - 亚像素直线测量
-
语法
line_gauss(Image : Lines : Sigma, Low, High, LightDark, Extend, Complete : )
-
示例
line_gauss(Image, Lines, 1.5, 5, 8, 'dark', 'true', 'true') // 高斯直线测量
5. 3D测量
xyz_to_object_model_3d - 3D点云生成
-
语法
xyz_to_object_model_3d(X, Y, Z : : ObjectModel3D)
-
示例
xyz_to_object_model_3d(X, Y, Z, ObjectModel3D) // 创建3D对象模型
fit_primitives_object_model_3d - 3D几何体拟合
-
语法
fit_primitives_object_model_3d(ObjectModel3D : : PrimitiveType, ParamName, ParamValue : ObjectModel3D)
-
示例
fit_primitives_object_model_3d(ObjectModel3D, 'plane', [], [], PlaneModel) // 平面拟合
七.3D视觉
1. 3D数据采集
read_object_model_3d - 读取3D模型文件
-
语法
read_object_model_3d( : : FileName, Scale, GenParamName, GenParamValue : ObjectModel3D, Status)
-
示例
read_object_model_3d('part.ply', 'm', [], [], ObjectModel3D, Status) // 读取PLY格式3D模型
connect_to_object_model_3d_device - 连接3D相机
-
语法
connect_to_object_model_3d_device( : : DeviceName, GenParamName, GenParamValue : AcqHandle)
-
示例
connect_to_object_model_3d_device('ensenso', [], [], AcqHandle) // 连接Ensenso相机
2. 3D数据处理
xyz_to_object_model_3d - 点云生成
-
语法
xyz_to_object_model_3d(X, Y, Z : : ObjectModel3D)
-
示例
xyz_to_object_model_3d(X, Y, Z, ObjectModel3D) // 从XYZ坐标创建3D模型
sample_object_model_3d - 点云采样
-
语法
sample_object_model_3d(ObjectModel3D : : Method, SampleDistance, GenParamName, GenParamValue : SampledObjectModel3D)
-
示例
sample_object_model_3d(ObjectModel3D, 'fast', 0.001, [], [], SampledModel) // 快速采样点云
3. 3D特征提取
surface_normals_object_model_3d - 表面法线计算
-
语法
surface_normals_object_model_3d(ObjectModel3D : : Method, GenParamName, GenParamValue : ObjectModel3DNormals)
-
示例
surface_normals_object_model_3d(ObjectModel3D, 'mls', [], [], NormalsModel) // MLS法线估计
find_surface_model - 3D表面匹配
-
语法
find_surface_model(SurfaceModelID, ObjectModel3D, Pose, MinScore, ReturnResultHandle, GenParamName, GenParamValue : Pose, Score, SurfaceMatchingResultID)
-
示例
find_surface_model(SurfaceModelID, SceneModel, [], 0.7, 'false', [], [], Pose, Score, ResultID) // 3D表面匹配
4. 3D测量
fit_primitives_object_model_3d - 几何体拟合
-
语法
fit_primitives_object_model_3d(ObjectModel3D : : PrimitiveType, ParamName, ParamValue : ObjectModel3D)
-
示例
fit_primitives_object_model_3d(ObjectModel3D, 'plane', [], [], PlaneModel) // 平面拟合
distance_object_model_3d - 3D距离计算
-
语法
distance_object_model_3d(ObjectModel3DFrom, ObjectModel3DTo : : GenParamName, GenParamValue : Distance)
-
示例
distance_object_model_3d(PlaneModel, ObjectModel3D, [], [], Distances) // 计算到平面的距离
5. 3D重建
binocular_disparity - 双目视差计算
-
语法
binocular_disparity(ImageRect1, ImageRect2 : Disparity, Score : CamParamRect1, CamParamRect2, RelPoseRect, Method, MaskWidth, MaskHeight, TextureThresh, MinDisparity, MaxDisparity, NumLevels, ScoreThresh, Filter, SubDistance : )
-
示例
binocular_disparity(Image1, Image2, Disparity, Score, CamParam1, CamParam2, RelPose, 'sgm', 11, 11, 0.001, -30, 30, 5, 0.5, 'none', 1) // SGM立体匹配
reconstruct_surface_stereo - 立体表面重建
-
语法
reconstruct_surface_stereo( : : Disparity, CameraSetupModelID, Method, GenParamName, GenParamValue : ObjectModel3D)
-
示例
reconstruct_surface_stereo(Disparity, CameraSetupID, 'point_cloud', [], [], ObjectModel3D) // 从视差图重建3D点云
八.条码与OCR
1. 条码识别
create_bar_code_model - 创建条码模型
-
语法
create_bar_code_model( : : GenParamName, GenParamValue : BarCodeHandle)
-
示例
create_bar_code_model([], [], BarCodeHandle) // 创建默认条码模型
find_bar_code - 查找并解码条码
-
语法
find_bar_code(Image : SymbolRegions : BarCodeHandle, CodeType : DecodedDataStrings)
-
示例
find_bar_code(Image, Region, BarCodeHandle, 'auto', Data) // 自动识别多种条码类型
get_bar_code_param - 获取条码参数
-
语法
get_bar_code_param(BarCodeHandle : : GenParamName : GenParamValue)
-
示例
get_bar_code_param(BarCodeHandle, 'check_char', CheckChar) // 获取校验字符设置
2. 二维码识别
create_data_code_2d_model - 创建二维码模型
-
语法
create_data_code_2d_model( : : SymbolType, GenParamName, GenParamValue : DataCodeHandle)
-
示例
create_data_code_2d_model('Data Matrix ECC 200', [], [], DataCodeHandle) // 创建Data Matrix模型
find_data_code_2d - 查找并解码二维码
-
语法
find_data_code_2d(Image : SymbolRegions : DataCodeHandle, SymbolType : ResultHandles, DecodedDataStrings)
-
示例
find_data_code_2d(Image, Region, DataCodeHandle, 'Data Matrix ECC 200', ResultHandle, Data) // 识别Data Matrix二维码
3. OCR识别
create_ocr_class_mlp - 创建OCR分类器
-
语法
create_ocr_class_mlp( : : WidthCharacter, HeightCharacter, Interpolation, Features, Characters, NumHidden, Preprocessing, NumComponents, RandSeed : OCRHandle)
-
示例
create_ocr_class_mlp(8, 10, 'constant', 'default', ['0','1','2','3','4','5','6','7','8','9'], 10, 'none', 10, 42, OCRHandle) // 创建数字OCR分类器
do_ocr_multi_class_mlp - 多字符OCR识别
-
语法
do_ocr_multi_class_mlp(CharacterRegions, Image : OCRHandle : Class, Confidence)
-
示例
do_ocr_multi_class_mlp(CharRegions, Image, OCRHandle, Class, Confidence) // 识别多个字符
find_text - 文本区域检测
-
语法
find_text(Image : : TextModel : TextResultID)
-
示例
find_text(Image, TextModel, ResultID) // 检测图像中的文本区域
4. 文本模型处理
create_text_model_reader - 创建文本阅读器模型
-
语法
create_text_model_reader( : : Mode, GenParamName, GenParamValue : TextModel)
-
示例
create_text_model_reader('auto', [], [], TextModel) // 创建自动文本阅读器
find_text_reader - 文本识别
-
语法
find_text_reader(Image : : TextModel : TextResultID)
-
示例
find_text_reader(Image, TextModel, ResultID) // 识别图像中的文本
get_text_result_reader - 获取识别结果
-
语法
get_text_result_reader( : : TextResultID, ResultName : ResultValue)
-
示例
get_text_result_reader(ResultID, 'word', Word) // 获取识别的单词文本
九.深度学习
1. 模型管理
read_dl_model - 读取预训练模型
-
语法
read_dl_model( : : FileName : DLModelHandle)
-
示例
read_dl_model('resnet50.hdl', DLModelHandle) // 读取ResNet50模型
create_dl_model_detection - 创建检测模型
-
语法
create_dl_model_detection( : : Backbone, NumClasses : DLModelHandle)
-
示例
create_dl_model_detection('pretrained_dl_classifier_compact.hdl', 10, DLModelHandle) // 创建10分类检测模型
2. 数据处理
gen_dl_samples_from_images - 生成样本
-
语法
gen_dl_samples_from_images(Images : : : DLSamples)
-
示例
gen_dl_samples_from_images(Images, DLSamples) // 从图像生成深度学习样本
preprocess_dl_samples - 样本预处理
-
语法
preprocess_dl_samples(DLSamples : : DLPreprocessParam : DLSamplesPreprocessed)
-
示例
preprocess_dl_samples(DLSamples, DLPreprocessParam, PreprocessedSamples) // 预处理样本
3. 模型训练
train_dl_model - 训练模型
-
语法
train_dl_model(DLDataset : : DLModelHandle, TrainParamName, TrainParamValue : DLModelHandle)
-
示例
train_dl_model(Dataset, DLModelHandle, ['epochs','batch_size'], [50,16], TrainedModel) // 训练50个epoch
evaluate_dl_model - 模型评估
-
语法
evaluate_dl_model(DLDataset : : DLModelHandle, EvaluationParamName, EvaluationParamValue : EvaluationResult)
-
示例
evaluate_dl_model(TestSet, DLModelHandle, ['measure'], ['precision'], Result) // 评估模型精度
4. 推理预测
apply_dl_model - 应用模型推理
-
语法
apply_dl_model(DLSamples : : DLModelHandle, Outputs : DLResult)
-
示例
apply_dl_model(Samples, DLModelHandle, ['classification'], Result) // 执行分类推理
get_dl_model_param - 获取模型参数
-
语法
get_dl_model_param(DLModelHandle : : ParamName : ParamValue)
-
示例
get_dl_model_param(DLModelHandle, 'class_names', ClassNames) // 获取类别名称
5. 结果处理
get_dl_sample_result - 获取样本结果
-
语法
get_dl_sample_result(DLSample : : Key : Result)
-
示例
get_dl_sample_result(Sample, 'classification_confidences', Confidences) // 获取分类置信度
visualize_dl_samples - 可视化结果
-
语法
visualize_dl_samples( : : DLSamples, DLModelHandle, WindowHandle, GenParamName, GenParamValue : )
-
示例
visualize_dl_samples(Samples, DLModelHandle, Window, ['display_labels'], ['true'], ) // 显示带标签的结果
十.图形显示核心算子介绍
dev_open_window - 打开图形窗口
-
语法
dev_open_window( : : Row, Column, Width, Height, Background : WindowHandle)
-
示例
-
dev_open_window(0, 0, 512, 512, 'black', WindowHandle)
-
功能说明
打开一个新的图形窗口,指定窗口位置(Row,Column)、大小(Width,Height)和背景色(Background),返回窗口句柄WindowHandle。
dev_display - 显示图像对象
-
语法
dev_display( : Object : : )
-
示例
-
read_image(Image, 'particle') ; dev_display(Image)
-
功能说明
在活动窗口中显示图像、区域或XLD等Halcon对象。
dev_set_color - 设置显示颜色
-
语法
dev_set_color( : : ColorName : )
-
示例
-
dev_set_color('red') ; dev_display(Region)
-
功能说明
设置后续图形显示的颜色,支持颜色名称如'red','green','blue'或RGB值如'#FF0000'。
disp_text - 显示文本
-
语法
disp_text( : : WindowHandle, String, CoordSystem, Row, Column, Color, Box : )
-
示例
disp_text(WindowHandle, '检测结果', 'window', 12, 12, 'black', 'true')
-
功能说明
在指定窗口显示文本,可设置位置、颜色和是否显示背景框。
disp_rectangle1 - 显示矩形
-
语法
disp_rectangle1( : : WindowHandle, Row1, Column1, Row2, Column2 : )
-
示例
disp_rectangle1(WindowHandle, 100, 100, 200, 200)
-
功能说明
通过对角坐标(Row1,Column1)和(Row2,Column2)显示矩形。
disp_region - 显示区域
-
语法
disp_region( : Region : WindowHandle : )
-
示例
threshold(Image, Region, 128, 255) dev_set_color('green') disp_region(Region, WindowHandle)
-
功能说明
在指定窗口中显示区域(Region)对象,显示颜色由dev_set_color设置。
十一.文件操作
read_image - 读取图像文件
-
语法
read_image( : Image : FileName : )
-
示例
read_image(Image, 'particle.png')
-
功能说明
从磁盘读取图像文件,支持多种格式如png、jpg、bmp、tiff等。
write_image - 保存图像文件
-
语法
write_image( : Image : Format, FillColor, FileName : )
-
示例
write_image(Image, 'png', 0, 'result.png')
-
功能说明
将图像保存到文件,需指定格式、填充色和文件名。
list_files - 列出目录文件
-
语法
list_files( : : Directory, Options : Files)
-
示例
list_files('images', 'files', ImageFiles)
-
功能说明
列出目录中的文件,Options可以是'files'、'directories'或'recursive'。
read_ocr_trainf - 读取OCR训练文件
-
语法
read_ocr_trainf( : : FileName : Character, Image)
-
示例
read_ocr_trainf('train.otf', Characters, Images)
-
功能说明
读取OCR训练文件,返回字符和对应图像。
write_ocr_trainf - 保存OCR训练数据
-
语法
write_ocr_trainf( : Character, Image : FileName : )
-
示例
write_ocr_trainf(Characters, Images, 'new_train.otf')
-
功能说明
将OCR训练数据保存到文件。
read_contour_xld_arc_info - 读取XLD轮廓文件
-
语法
read_contour_xld_arc_info( : : FileName : Contour)
-
示例
read_contour_xld_arc_info('contour.arc', Contours)
-
功能说明
读取XLD轮廓文件,返回轮廓对象。
write_contour_xld_arc_info - 保存XLD轮廓
-
语法
write_contour_xld_arc_info( : Contour : FileName : )
-
示例
write_contour_xld_arc_info(Contours, 'output.arc')
-
功能说明
将XLD轮廓保存到文件。
read_shape_model - 读取形状模板
-
语法
read_shape_model( : : FileName : ModelID)
-
示例
read_shape_model('model.shm', ModelID)
-
功能说明
从文件读取预训练的形状模板。
write_shape_model - 保存形状模板
-
语法
write_shape_model( : ModelID : FileName : )
-
示例
write_shape_model(ModelID, 'new_model.shm')
-
功能说明
将形状模板保存到文件。
file_exists - 检查文件是否存在
-
语法
file_exists( : : FileName : Exists)
-
示例
file_exists('data.txt', Exists)
-
功能说明
检查指定文件是否存在,返回布尔值。
delete_file - 删除文件
-
语法
delete_file( : : FileName : )
-
示例
delete_file('temp.dat')
-
功能说明
删除指定的文件。
十二.控制系统
程序流程控制
stop - 停止程序执行
-
语法
stop( : : : )
-
示例
if (ErrorCode != 0)stop() endif
-
功能说明
立即停止程序执行,常用于错误处理。
exit - 退出程序
-
语法
exit( : : : )
-
示例
if (NoMoreImages)exit() endif
-
功能说明
退出整个HDevelop程序。
continue - 继续循环
-
语法
continue( : : : )
-
示例
for i := 1 to 100 by 1if (i % 2 == 0)continue()endif* 处理奇数... endfor
-
功能说明
跳过当前循环的剩余部分,继续下一次循环。
break - 中断循环
-
语法
break( : : : )
-
示例
while (true)* 处理...if (TerminateCondition)break()endif endwhile
-
功能说明
立即退出当前循环结构。
错误处理
try / catch / endtry - 异常处理
-
语法
try* 可能出错的代码 catch (Exception)* 异常处理 endtry
-
示例
tryread_image(Image, 'nonexistent.jpg') catch (HException)dev_display(ErrorImage) endtry
-
功能说明
捕获并处理运行时异常,防止程序崩溃。
throw - 抛出异常
-
语法
throw( : : Exception : )
-
示例
if (Area < Threshold)throw('Area too small') endif
-
功能说明
主动抛出异常,可被catch捕获。
定时控制
count_seconds - 获取系统时间
-
语法
count_seconds( : : : Seconds)
-
示例
count_seconds(StartTime) * 执行操作... count_seconds(EndTime) Elapsed := EndTime - StartTime
-
功能说明
获取当前系统时间(秒),用于计时。
wait_seconds - 暂停执行
-
语法
wait_seconds( : : Seconds : )
-
示例
wait_seconds(0.5) * 暂停500毫秒
-
功能说明
使程序暂停指定秒数。
系统控制
set_system - 设置系统参数
-
语法
set_system( : : SystemParameter, Value : )
-
示例
set_system('clip_region', 'true') set_system('tsp_width', 2)
-
功能说明
配置Halcon全局系统参数。
get_system - 获取系统参数
-
语法
get_system( : : SystemParameter : Value)
-
示例
get_system('version', HalconVersion)
-
功能说明
查询Halcon系统参数值。
reset_obj_db - 重置对象数据库
-
语法
reset_obj_db( : : : )
-
示例
reset_obj_db()
-
功能说明
清除内存中的所有Halcon对象,释放内存。
十三.数学运算
基础算术运算
add - 加法运算
-
语法
add( : Image1, Image2 : ResultImage : Mult, Add : )
-
示例
add(Image1, Image2, ResultImage, 1, 0)
-
功能说明
对两幅图像进行像素级加法运算:ResultImage = Image1 × Mult + Image2 × Add
sub - 减法运算
-
语法
sub( : Image1, Image2 : ResultImage : Mult, Add : )
-
示例
sub(Image1, Image2, ResultImage, 1, 0)
-
功能说明
对两幅图像进行像素级减法运算:ResultImage = Image1 × Mult - Image2 × Add
mult - 乘法运算
-
语法
mult( : Image1, Image2 : ResultImage : Mult, Add : )
-
示例
mult(Image1, Image2, ResultImage, 1, 0)
-
功能说明
对两幅图像进行像素级乘法运算:ResultImage = Image1 × Image2 × Mult + Add
div - 除法运算
-
语法
div( : Image1, Image2 : ResultImage : Mult, Add : )
-
示例
div(Image1, Image2, ResultImage, 1, 0)
-
功能说明
对两幅图像进行像素级除法运算:ResultImage = Image1 / Image2 × Mult + Add
统计运算
min_max_gray - 灰度值极值统计
-
语法
min_max_gray( : Regions, Image : : Percent : Min, Max, Range)
-
示例
min_max_gray(Region, Image, 0, Min, Max, Range)
-
功能说明
计算区域内图像灰度值的最小值、最大值和范围
intensity - 区域灰度统计
-
语法
intensity( : Regions, Image : : Mean, Deviation)
-
示例
intensity(Region, Image, Mean, Deviation)
-
功能说明
计算区域内图像灰度值的均值和标准差
area_center - 区域面积和中心
-
语法
area_center( : Regions : : Area, Row, Column)
-
示例
area_center(Region, Area, Row, Column)
-
功能说明
计算区域的面积和中心坐标
几何变换
hom_mat2d_identity - 创建单位矩阵
-
语法
hom_mat2d_identity( : : : HomMat2DIdentity)
-
示例
hom_mat2d_identity(HomMat2D)
-
功能说明
创建一个2D单位齐次变换矩阵
hom_mat2d_rotate - 旋转矩阵
-
语法
hom_mat2d_rotate( : : HomMat2D, Phi, Px, Py : HomMat2DRotate)
-
示例
hom_mat2d_rotate(HomMat2D, rad(45), 100, 100, HomMat2DRotate)
-
功能说明
在现有变换矩阵上添加旋转变换
hom_mat2d_translate - 平移矩阵
-
语法
hom_mat2d_translate( : : HomMat2D, Tx, Ty : HomMat2DTranslate)
-
示例
hom_mat2d_translate(HomMat2D, 50, 30, HomMat2DTranslate)
-
功能说明
在现有变换矩阵上添加平移变换
逻辑运算
union1 - 区域合并
-
语法
union1( : Regions : RegionUnion : )
-
示例
union1(RegionList, MergedRegion)
-
功能说明
将多个区域合并为一个区域
intersection - 区域交集
-
语法
intersection( : Region1, Region2 : RegionIntersection : )
-
示例
intersection(RegionA, RegionB, OverlapRegion)
-
功能说明
计算两个区域的交集区域
complement - 区域补集
-
语法
complement( : Region : RegionComplement : )
-
示例
complement(Region, BackgroundRegion)
-
功能说明
计算区域的补集(背景区域)
十四.系统操作
系统信息与控制
get_system - 获取系统参数
-
语法
get_system( : : SystemParameter : Value)
-
示例
get_system('version', HalconVersion) get_system('processor_num', NumCores)
-
功能说明
查询Halcon系统参数,如版本号、处理器核心数等常用参数
set_system - 设置系统参数
-
语法
set_system( : : SystemParameter, Value : )
-
示例
set_system('tsp_width', 2) // 设置线宽 set_system('clip_region', 'true') // 启用区域裁剪
-
功能说明
配置Halcon全局运行参数,影响后续所有操作
内存管理
reset_obj_db - 重置对象数据库
-
语法
reset_obj_db( : : : )
-
示例
* 处理大量图像后... reset_obj_db() // 释放内存
-
功能说明
清除内存中所有Halcon对象,释放系统资源
clear_obj - 清除特定对象
-
语法
clear_obj( : Object : )
-
示例
clear_obj(LargeImage) // 释放单个图像内存
-
功能说明
删除指定的Halcon对象并释放其内存
并行计算控制
set_operator_timeout - 设置操作超时
-
语法
set_operator_timeout( : : Timeout : )
-
示例
set_operator_timeout(5000) // 设置5秒超时
-
功能说明
为耗时操作设置超时时间(毫秒)
get_operator_timeout - 获取当前超时设置
-
语法
get_operator_timeout( : : : Timeout)
-
示例
get_operator_timeout(CurrentTimeout)
-
功能说明
查询当前设置的超时时间
系统状态查询
count_relation - 统计对象数量
-
语法
count_relation( : Objects : : Number)
-
示例
count_relation(ImageArray, NumImages)
-
功能说明
统计Halcon元组或对象数组中的元素数量
get_handle_info - 获取句柄信息
-
语法
get_handle_info( : : Handle, InfoName : InfoValue)
-
示例
get_handle_info(WindowHandle, 'width', WindowWidth)
-
功能说明
查询各种Halcon句柄(窗口、线程等)的详细信息
多线程控制
par_start - 启动并行操作
-
语法
par_start( : : : ThreadID)
-
示例
par_start(ThreadID) * 在子线程中执行操作...
-
功能说明
创建新线程执行并行任务
par_join - 等待线程结束
-
语法
par_join( : : ThreadID : )
-
示例
par_join(ThreadID) // 等待指定线程完成
-
功能说明
阻塞当前线程直到指定线程执行完毕
十五.元组操作
元组创建与初始化
tuple_gen_const - 生成常量元组
-
语法
tuple_gen_const( : : Length, Const : Tuple)
-
示例
tuple_gen_const(5, 0, ZeroTuple) // 创建[0,0,0,0,0]
-
功能说明
生成指定长度且所有元素值相同的元组
tuple_rand - 生成随机元组
-
语法
tuple_rand( : : Size : Tuple)
-
示例
tuple_rand(10, RandomTuple) // 10个随机数(0~1)
-
功能说明
生成指定长度的随机数元组(0~1均匀分布)
元组基本操作
tuple_length - 获取元组长度
-
语法
tuple_length( : Tuple : : Length)
-
示例
tuple_length([1,2,3], Len) // Len=3
-
功能说明
返回元组中元素的数量
tuple_concat - 连接元组
-
语法
tuple_concat( : Tuple1, Tuple2 : : Concatenated)
-
示例
tuple_concat([1,2], [3,4], Result) // Result=[1,2,3,4]
-
功能说明
将两个元组连接成一个新元组
元组元素访问
tuple_select - 选择元组元素
-
语法
tuple_select( : Tuple : : Index : Selected)
-
示例
tuple_select([10,20,30,40], [0,2], Selected) // Selected=[10,30]
-
功能说明
根据索引选择元组中的元素(索引从0开始)
tuple_find - 查找元素位置
-
语法
tuple_find( : Tuple, Value : : : Indices)
-
示例
tuple_find([5,3,7,3,9], 3, Indices) // Indices=[1,3]
-
功能说明
查找元组中指定值出现的所有位置索引
元组数学运算
tuple_add - 元组加法
-
语法
tuple_add( : Tuple1, Tuple2 : : Sum)
-
示例
tuple_add([1,2,3], [4,5,6], Sum) // Sum=[5,7,9]
-
功能说明
对两个元组进行逐元素加法运算
tuple_mult - 元组乘法
-
语法
tuple_mult( : Tuple1, Tuple2 : : Product)
-
示例
tuple_mult([1,2,3], [4,5,6], Prod) // Prod=[4,10,18]
-
功能说明
对两个元组进行逐元素乘法运算
元组逻辑运算
tuple_and - 逻辑与运算
-
语法
tuple_and( : Tuple1, Tuple2 : : And)
-
示例
tuple_and([1,0,1], [1,1,0], Result) // Result=[1,0,0]
-
功能说明
对两个元组进行逐元素逻辑与运算
tuple_not - 逻辑非运算
-
语法
tuple_not( : Tuple : : Not)
-
示例
tuple_not([1,0,1], Result) // Result=[0,1,0]
-
功能说明
对元组进行逐元素逻辑非运算
元组排序与统计
tuple_sort - 元组排序
-
语法
tuple_sort( : Tuple : : Sorted)
-
示例
tuple_sort([3,1,4,2], Sorted) // Sorted=[1,2,3,4]
-
功能说明
对元组元素进行升序排序
tuple_max - 求最大值
-
语法
tuple_max( : Tuple : : Max)
-
示例
tuple_max([5,2,8,3], MaxVal) // MaxVal=8
-
功能说明
返回元组中的最大值
元组类型转换
tuple_number - 转换为数字元组
-
语法
tuple_number( : Tuple : : Number)
-
示例
tuple_number(['1','2','3'], Numbers) // Numbers=[1,2,3]
-
功能说明
将字符串元组转换为数字元组
tuple_string - 转换为字符串元组
-
语法
tuple_string( : Tuple : Format : String)
-
示例
tuple_string([1.5,2.3], '.2f', StrTuple) // StrTuple=['1.50','2.30']
-
功能说明
将数字元组转换为格式化字符串元组
十六.对象操作
对象创建与生成
gen_empty_obj - 创建空对象
-
语法
gen_empty_obj( : : : EmptyObject)
-
示例
gen_empty_obj(EmptyRegion)
-
功能说明
创建一个不包含任何数据的空对象,常用于初始化对象变量
gen_region_points - 从点生成区域
-
语法
gen_region_points( : Region : Rows, Columns : )
-
示例
gen_region_points(Region, [100,150,200], [50,100,150])
-
功能说明
根据给定的像素坐标点(Rows,Columns)生成区域对象
对象复制与转换
copy_obj - 复制对象
-
语法
copy_obj( : Objects : : Index, Num : ObjectCopy)
-
示例
copy_obj(OriginalRegions, 1, 3, CopiedRegions)
-
功能说明
复制对象或对象数组中的一部分,Index指定起始索引(1-based),Num指定数量
obj_to_integer - 对象转整数
-
语法
obj_to_integer( : Object : : Integer)
-
示例
obj_to_integer(ImageHandle, ImageID)
-
功能说明
将对象句柄转换为整数表示(主要用于C/C++接口)
对象连接与分离
concat_obj - 连接对象数组
-
语法
concat_obj( : Objects1, Objects2 : : ConnectedObjects)
-
示例
concat_obj(Regions1, Regions2, AllRegions)
-
功能说明
将两个对象数组连接成一个新的对象数组
select_obj - 选择对象元素
-
语法
select_obj( : Objects : : Index : SelectedObject)
-
示例
select_obj(RegionArray, 3, SingleRegion)
-
功能说明
从对象数组中选择指定索引(1-based)的单个对象
对象信息获取
count_obj - 统计对象数量
-
语法
count_obj( : Objects : : Number)
-
示例
count_obj(RegionList, NumRegions)
-
功能说明
统计对象数组中的元素数量
get_obj_class - 获取对象类型
-
语法
get_obj_class( : Object : : Class)
-
示例
get_obj_class(Image, Type) // 返回'image' get_obj_class(Region, Type) // 返回'region'
-
功能说明
获取对象的类型名称,如'image'、'region'、'xld'等
对象比较与测试
test_equal_obj - 测试对象相等性
-
语法
test_equal_obj( : Objects1, Objects2 : : IsEqual)
-
示例
test_equal_obj(RegionA, RegionB, Same)
-
功能说明
比较两个对象是否完全相同,返回布尔结果
test_subset_region - 测试区域包含关系
-
语法
test_subset_region( : Region1, Region2 : : IsSubset)
-
示例
test_subset_region(SmallRegion, LargeRegion, IsInside)
-
功能说明
测试Region1是否是Region2的子集
对象几何变换
affine_trans_region - 仿射变换区域
-
语法
affine_trans_region( : Region, HomMat2D : RegionAffineTrans : Interpolate : )
-
示例
hom_mat2d_identity(Matrix) hom_mat2d_rotate(Matrix, rad(45), 0, 0, RotMatrix) affine_trans_region(Region, RotMatrix, RotatedRegion, 'constant')
-
功能说明
对区域对象应用2D仿射变换
zoom_region - 区域缩放
-
语法
zoom_region( : Region : RegionZoom : ScaleWidth, ScaleHeight : )
-
示例
zoom_region(Region, ZoomedRegion, 0.5, 0.5)
-
功能说明
按指定比例缩放区域对象
对象可视化
get_obj_info - 获取对象信息
-
语法
get_obj_info( : Object : : InfoName : InfoValue)
-
示例
get_obj_info(Image, 'width', Width) get_obj_info(Region, 'area', Area)
-
功能说明
获取对象的特定属性信息,如图像宽度、区域面积等
十七.开发工具
程序调试与分析
dev_disp_text - 调试文本显示
-
语法
dev_disp_text( : : TextString, CoordSystem, Row, Column, Color, Box : )
-
示例
dev_disp_text('Processing image '+ImageIndex, 'window', 12, 12, 'black', 'true')
-
功能说明
在图形窗口显示调试文本,可带背景框,用于实时显示变量值或程序状态
dev_error_var - 获取错误变量
-
语法
dev_error_var( : : Operator, Index : Variable)
-
示例
tryread_image(Image, 'invalid.jpg') catch (Exception)dev_error_var('read_image', 0, ErrorMessage) endtry
-
功能说明
获取特定算子调用时的错误信息变量
性能分析工具
count_seconds - 精确计时
-
语法
count_seconds( : : : Seconds)
-
示例
count_seconds(StartTime) * 执行待测代码 count_seconds(EndTime) ExecutionTime := EndTime - StartTime
-
功能说明
获取高精度系统时间(秒),用于代码性能分析
profile_operations - 操作性能分析
-
语法
profile_operations( : : Mode : )
-
示例
profile_operations('on') // 开启性能分析 * 执行待分析代码 profile_operations('off') // 关闭并显示结果
-
功能说明
分析算子执行时间和调用次数,支持'on'/'off'/'reset'模式
代码生成工具
export_procedure - 导出过程
-
语法
export_procedure( : : ProcedureName, FileName, Target : )
-
示例
export_procedure('image_processing', 'proc.hdvp', 'hdev')
-
功能说明
将指定过程导出为独立文件,支持多种目标格式
gen_cpp_code - 生成C++代码
-
语法
gen_cpp_code( : : FileName, ProcedureNames : )
-
示例
gen_cpp_code('detection.cpp', ['preprocess','detect'])
-
功能说明
将HDevelop过程转换为可嵌入的C++代码
交互式开发工具
inspect_shape_model - 形状模板检查
-
语法
inspect_shape_model( : : ModelID, GenParamName, GenParamValue : )
-
示例
inspect_shape_model(ModelID, 'contrast', 20)
-
功能说明
交互式查看和调整形状模板参数
dev_inspect_ctrl - 控制变量检查
-
语法
dev_inspect_ctrl( : : VariableName : )
-
示例
Threshold := 128 dev_inspect_ctrl('Threshold') // 弹出交互调节窗口
-
功能说明
创建交互式控件来实时调整变量值
自动化测试工具
test_equal_obj - 对象相等性测试
-
语法
test_equal_obj( : Objects1, Objects2 : : IsEqual)
-
示例
test_equal_obj(ExpectedResult, ActualResult, TestPassed) if (not TestPassed)dev_disp_text('Test failed!', 'window', 50, 50, 'red', 'true') endif
-
功能说明
自动化测试中验证两个对象是否相同
assert - 断言检查
-
语法
assert( : : Condition, Message : )
-
示例
assert(Area > 100, 'Area too small')
-
功能说明
验证条件是否为真,否则抛出异常并显示消息
代码优化工具
optimize_direct - 直接优化模式
-
语法
optimize_direct( : : Mode : )
-
示例
optimize_direct('on') // 开启直接执行模式 * 性能关键代码 optimize_direct('off') // 恢复解释模式
-
功能说明
切换直接执行模式(提高速度)或解释模式(便于调试)
get_operator_precedence - 获取算子优先级
-
语法
get_operator_precedence( : : OperatorName : Precedence)
-
示例
get_operator_precedence('threshold', Priority)
-
功能说明
查询算子的执行优先级,用于优化执行顺序
十八.通信算子分类
设备通信接口
open_framegrabber - 打开图像采集设备
-
语法
open_framegrabber( : : Name, HorizontalResolution, VerticalResolution, ImageWidth, ImageHeight, StartRow, StartColumn, Field, BitsPerChannel, ColorSpace, Generic, ExternalTrigger, CameraType, Device, Port, LineIn : AcqHandle)
-
示例
open_framegrabber('GigEVision', 1, 1, 0, 0, 0, 0, 'default', -1, 'default', 'default', 'default', 'default', 0, -1, AcqHandle)
-
功能说明
连接图像采集设备(GigE, USB3 Vision等),返回采集句柄
close_framegrabber - 关闭采集设备
-
语法
close_framegrabber( : : AcqHandle : )
-
示例
close_framegrabber(AcqHandle)
-
功能说明
关闭图像采集设备连接
工业通信协议
opc_ua_read_node - OPC UA读取
-
语法
opc_ua_read_node( : : HostName, NodeId, NamespaceIndex, AttributeId : Value)
-
示例
opc_ua_read_node('opc.tcp://localhost', 'ns=2;s=Device1.Temperature', 2, 13, TempValue)
-
功能说明
通过OPC UA协议从工业设备读取数据
modbus_read_holding_registers - Modbus读取
-
语法
modbus_read_holding_registers( : : Port, SlaveAddress, StartingAddress, Quantity : Values)
-
示例
modbus_read_holding_registers('COM3', 1, 40001, 5, RegisterValues)
-
功能说明
通过Modbus RTU协议读取保持寄存器
网络通信
socket_connect - 建立Socket连接
-
语法
socket_connect( : : HostName, Port, Timeout : Socket)
-
示例
socket_connect('192.168.1.100', 5000, 1000, SocketHandle)
-
功能说明
创建TCP/IP socket连接
socket_send_data - Socket发送数据
-
语法
socket_send_data( : : Socket, Data : )
-
示例
socket_send_data(SocketHandle, 'Result: OK')
-
功能说明
通过socket连接发送数据
串口通信
serial_open - 打开串口
-
语法
serial_open( : : PortName, BaudRate, DataBits, StopBits, Parity, FlowControl : SerialHandle)
-
示例
serial_open('COM1', 9600, 8, 1, 'none', 'none', SerialHandle)
-
功能说明
配置并打开串行端口
serial_read_line - 读取串口数据
-
语法
serial_read_line( : : SerialHandle, Timeout : Data)
-
示例
serial_read_line(SerialHandle, 500, ReceivedData)
-
功能说明
从串口读取一行数据(直到换行符)
数据交换接口
set_window_param - 设置窗口参数
-
语法
set_window_param( : : WindowHandle, Param, Value : )
-
示例
set_window_param(WindowHandle, 'window_handle', 'visible')
-
功能说明
配置窗口显示参数,可用于远程显示控制
get_window_param - 获取窗口参数
-
语法
get_window_param( : : WindowHandle, Param : Value)
-
示例
get_window_param(WindowHandle, 'window_handle', WinHandle)
-
功能说明
查询窗口参数信息
工业相机控制
set_framegrabber_param - 设置采集参数
-
语法
set_framegrabber_param( : : AcqHandle, Param, Value : )
-
示例
set_framegrabber_param(AcqHandle, 'ExposureTime', 5000)
-
功能说明
配置图像采集设备参数
grab_image_async - 异步采集图像
-
语法
grab_image_async( : Image : AcqHandle, MaxDelay : )
-
示例
grab_image_async(Image, AcqHandle, -1)
-
功能说明
异步方式采集单帧图像,不阻塞程序执行
十九.标定算子分类
相机标定
create_calib_data - 创建标定数据模型
-
语法
create_calib_data( : : CalibSetup, NumCameras, NumCalibObjects : CalibDataID)
-
示例
create_calib_data('calibration_object', 1, 1, CalibDataID)
-
功能说明
创建相机标定数据模型,指定标定类型(单/多相机)、标定板数量
set_calib_data_calib_object - 设置标定板参数
-
语法
set_calib_data_calib_object( : : CalibDataID, CalibObjIdx, CalibObjDescr : )
-
示例
set_calib_data_calib_object(CalibDataID, 0, 'calplate_30mm.descr')
-
功能说明
配置标定板描述文件(包含尺寸、标记点信息等)
find_calib_object - 查找标定板
-
语法
find_calib_object( : Image : CalibDataID, CameraIdx, CalibObjIdx, GenParamName, GenParamValue : )
-
示例
find_calib_object(Image, CalibDataID, 0, 0, [], [])
-
功能说明
在图像中自动检测标定板并提取标记点
calibrate_cameras - 执行相机标定
-
语法
calibrate_cameras( : : CalibDataID : Error)
-
示例
calibrate_cameras(CalibDataID, ReprojectionError)
-
功能说明
根据采集的多组标定板图像计算相机内外参数
手眼标定
create_hand_eye_calib_data - 创建手眼标定模型
-
语法
create_hand_eye_calib_data( : : CalibSetup : HandEyeCalibDataID)
-
示例
create_hand_eye_calib_data('robot_stationary_camera', HandEyeCalibID)
-
功能说明
创建手眼标定数据模型,支持四种标定场景配置
set_hand_eye_calib_data - 设置标定数据
-
语法
set_hand_eye_calib_data( : : HandEyeCalibDataID, DataType, DataIdx, Pose : )
-
示例
set_hand_eye_calib_data(HandEyeCalibID, 'tool_in_base_pose', 0, ToolPose)
-
功能说明
添加机器人位姿数据或标定板位姿数据
calibrate_hand_eye - 执行手眼标定
-
语法
calibrate_hand_eye( : : HandEyeCalibDataID : Errors)
-
示例
calibrate_hand_eye(HandEyeCalibID, CalibrationErrors)
-
功能说明
计算相机与机器人之间的变换关系
标定结果应用
get_calib_data - 获取标定结果
-
语法
get_calib_data( : : CalibDataID, ItemType, ItemIdx, DataName : DataValue)
-
示例
get_calib_data(CalibDataID, 'camera', 0, 'params', CameraParams)
-
功能说明
查询标定后的相机参数、畸变系数等结果数据
change_radial_distortion_image - 图像畸变校正
-
语法
change_radial_distortion_image( : Image, Region : CorrectedImage : CamParamIn, CamParamOut : )
-
示例
change_radial_distortion_image(Image, Region, CorrectedImage, CamParamIn, CamParamOut)
-
功能说明
根据标定结果对图像进行径向畸变校正
标定板生成
gen_caltab - 生成标定板描述文件
-
语法
gen_caltab( : : XNum, YNum, MarkDist, DiameterRatio, CalPlateDescr, CalPlatePSFile : )
-
示例
gen_caltab(7, 7, 0.03, 0.5, 'caltab_30mm.descr', 'caltab.ps')
-
功能说明
生成圆形标记点标定板的描述文件和可打印的PostScript文件
create_caltab - 创建标定板图像
-
语法
create_caltab( : : XNum, YNum, MarkDist, DiameterRatio, Width, Height, Row, Column : CalTabImage)
-
示例
create_caltab(7, 7, 0.03, 0.5, 512, 512, 256, 256, CalTabImage)
-
功能说明
直接生成标定板的合成图像,用于仿真测试
实战案例
案例1:二维码识别
* 读取图像
read_image(Image, 'qrcode.jpg')* 创建二维码模型
create_data_code_2d_model('QR Code', [], [], DataCodeHandle)* 查找二维码
find_data_code_2d(Image, SymbolXLDs, DataCodeHandle, [], [], ResultHandles, DecodedDataStrings)* 显示结果
dev_display(Image)
dev_display(SymbolXLDs)
disp_message('解码结果: ' + DecodedDataStrings[0], 'window', 12, 12, 'black', 'true')
案例2:尺寸测量
* 读取图像并预处理
read_image(Image, 'part.jpg')
rgb1_to_gray(Image, GrayImage)
threshold(GrayImage, Region, 0, 120)* 测量零件尺寸
smallest_rectangle1(Region, Row1, Column1, Row2, Column2)
Width := Column2 - Column1
Height := Row2 - Row1* 计算像素到实际尺寸比例
* (假设已知参考长度为100mm对应200像素)
PixelSize := 100.0 / 200.0 // mm/pixel
RealWidth := Width * PixelSize
RealHeight := Height * PixelSize* 显示结果
dev_display(Image)
dev_display(Region)
disp_message(['宽度: ' + RealWidth$'.2f' + ' mm', '高度: ' + RealHeight$'.2f' + ' mm'], 'window', 12, 12, 'black', 'true')
实战应用流程经验分享
1. 标准检测流程
1. 图像采集 (grab_image) 2. 预处理 (gauss_filter, emphasize) 3. 区域分割 (threshold, connection) 4. 特征提取 (area_center, circularity) 5. 结果判断 (if-then-else) 6. 结果显示 (dev_display, disp_message)
2. 高精度匹配流程
1. 创建模板 (create_shape_model) 2. 图像对齐 (find_shape_model) 3. ROI提取 (reduce_domain) 4. 亚像素测量 (edges_sub_pix, fit_line_contour_xld) 5. 偏差计算 (distance_pp)
3. 深度学习流程
1. 模型加载 (read_dl_model) 2. 预处理 (zoom_image, convert_image_type) 3. 推理执行 (apply_dl_classifier) 4. 结果解析 (get_dl_classifier_result) 5. 后处理 (select_obj, connection)
最佳实践建议
-
算子选择原则:
-
优先使用专用算子而非通用算子
-
选择支持ROI处理的算子提高效率
-
考虑算子对亚像素精度的支持
-
-
性能优化技巧:
* 减少处理区域 reduce_domain(Image, ROI, ImageReduced)* 合理设置金字塔层级 set_system('image_pyramid_levels', 3)* 复用中间结果 copy_obj(Region, RegionCopy, 1, -1)
-
代码可维护性:
* 使用有意义的变量名 DefectRegion := threshold(Image, 200, 255)* 添加详细注释 // 使用Otsu方法自动计算阈值 binary_threshold(Image, Region, 'max_separability', 'dark', UsedThreshold)* 封装常用操作为过程 procedure preprocess_image(inputImage, outputImage)rgb1_to_gray(inputImage, GrayImage)emphasize(GrayImage, outputImage, 7, 7, 1)return () endprocedure
-
版本兼容性:
-
注意算子在不同Halcon版本中的变化
-
使用
get_operator_info
查询算子信息 -
优先使用长期支持(LTS)版本中的稳定算子
-
重要说明:
如果需要完整算子文档建议:
- 在HDevelop中按F1查看《HALCON Operator Reference》
- 使用HDevelop的算子窗口搜索功能(Ctrl+F)
- 访问MVTec官方文档网站获取最新说明
本文到此结束,制作不易,未经作者允许禁止转载!!!