介紹
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官方文檔網站獲取最新說明
本文到此結束,制作不易,未經作者允許禁止轉載!!!