三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

Halcon综合编程二

Halcon综合编程二

我实在懒得弄了

点击查看代码
***关闭更新以提高性能
dev_update_off ()
***设置形状模型路径
sPath:='sPath'
***设置测量模型路径
mdata :='mdata'
***调试开关(true为开启)
isDbug:=true
***设置图像路径
imgPath:='1'
***获取窗口句柄
dev_get_window (WindowHandle)
***读取图像
read_image (Image, imgPath)
***转为灰度图
rgb1_to_gray (Image, GrayImage)
***显示灰度图像
dev_display (GrayImage)
***检查形状模型文件是否存在
file_exists (sPath, FileExists)
***检查测量模型文件是否存在
file_exists (mdata, FileExists1)
***如果形状模型存在则读取,否则创建
if (FileExists)read_shape_model (sPath, ModelID)
else***暂停,让用户框选模板ROIstop ()***绘制矩形ROIdraw_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2)***生成矩形区域gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)***裁剪出ROI区域reduce_domain (GrayImage, Rectangle, ImageReduced)***裁剪至最小矩形crop_domain (ImageReduced, ImagePart)***创建形状模型(起始角度0,范围360°,其他自动)create_shape_model (ImagePart, 'auto',0, rad(360), 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)***保存形状模型write_shape_model (ModelID, sPath)
endif
***执行形状匹配(查找模板)
find_shape_model (GrayImage, ModelID, 0, rad(360), 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score)
***获取模板轮廓
get_shape_model_contours (ModelContours, ModelID, 1)
***创建齐次单位矩阵
hom_mat2d_identity (HomMat2DIdentity)
***平移矩阵
hom_mat2d_translate (HomMat2DIdentity,  Row, Column, HomMat2DTranslate)
***旋转矩阵(基于匹配结果)
hom_mat2d_rotate (HomMat2DTranslate, Angle,  Row, Column, HomMat2DRotate)
***将模板轮廓仿射变换到匹配位置
affine_trans_contour_xld (ModelContours, ContoursAffineTrans, HomMat2DRotate)
***显示匹配后的轮廓
dev_display (ContoursAffineTrans)
***如果测量模型存在则读取,否则创建
if (FileExists1)read_metrology_model (mdata, MetrologyHandle)
else***创建测量模型create_metrology_model (MetrologyHandle)***获取图像尺寸get_image_size (GrayImage, Width, Height)***设置测量模型图像尺寸set_metrology_model_image_size (MetrologyHandle, Width, Height)***暂停,让用户绘制圆形测量对象stop ()
*圆***绘制圆形draw_circle (WindowHandle, Row3, Column3, Radius)***生成圆形区域(仅用于显示)gen_circle (Circle, Row3, Column3, Radius)***添加圆形测量对象add_metrology_object_circle_measure (MetrologyHandle, Row3, Column3, Radius, 20, 5, 1, 30, [], [], Index)***暂停,绘制第一条短线stop ()*短线1***绘制线段draw_line (WindowHandle, Row11, Column11, Row21, Column21)***生成线段区域(显示用)gen_region_line (RegionLines, Row11, Column11, Row21, Column21)***添加线段测量对象add_metrology_object_line_measure (MetrologyHandle, Row11, Column11, Row21, Column21, 20, 5, 1, 30, [], [], Index1)***暂停,绘制第二条短线stop ()*短线2draw_line (WindowHandle, Row12, Column12, Row22, Column22)gen_region_line (RegionLines1, Row12, Column12, Row22, Column22)add_metrology_object_line_measure (MetrologyHandle, Row12, Column12, Row22, Column22, 20, 5, 1, 30, [], [], Index2)***暂停,绘制第一条长线stop ()*长线1draw_line (WindowHandle, Row13, Column13, Row23, Column23)gen_region_line (RegionLines2, Row13, Column13, Row23, Column23)add_metrology_object_line_measure (MetrologyHandle, Row13, Column13, Row23, Column23, 20, 5, 1, 30, [], [], Index3)***暂停,绘制第二条长线stop ()*长线2draw_line (WindowHandle, Row14, Column14, Row24, Column24)gen_region_line (RegionLines3, Row14, Column14, Row24, Column24)add_metrology_object_line_measure (MetrologyHandle, Row14, Column14, Row24, Column24, 20, 5, 1, 30, [], [], Index4)***设置测量模型的参考系(基于模板匹配结果)set_metrology_model_param (MetrologyHandle, 'reference_system', [ Row,Column, Angle])***保存测量模型write_metrology_model (MetrologyHandle, mdata)
endif
***设置测量对象参数:所有对象实例数为1
set_metrology_object_param (MetrologyHandle, 'all', 'num_instances', 1)
***再次执行形状匹配(用于对齐测量模型,使用'interpolation')
find_shape_model (Image, ModelID, 0, rad(360), 0.5, 1, 0.5, 'interpolation', 0, 0.9, Row4, Column4, Angle1, Score1)
***将测量模型对齐到匹配到的位置
align_metrology_model (MetrologyHandle,Row4,Column4,Angle1)
***应用测量模型到灰度图
apply_metrology_model (GrayImage, MetrologyHandle)
***获取测量模型中的测量点(用于显示)
get_metrology_object_measures (Contours, MetrologyHandle, 'all', 'all', Row5, Column5)
***显示测量点
dev_display (Contours)
***再次应用到原图(彩色图像)
apply_metrology_model (Image, MetrologyHandle)
***获取圆形测量结果参数
get_metrology_object_result (MetrologyHandle, 0, 'all', 'result_type', 'all_param', Parameter)
***获取第一条短线测量结果
get_metrology_object_result (MetrologyHandle, 1, 'all', 'result_type', 'all_param', Parameter1)
***获取第二条短线测量结果
get_metrology_object_result (MetrologyHandle, 2, 'all', 'result_type', 'all_param', Parameter2)
***获取第一条长线测量结果
get_metrology_object_result (MetrologyHandle, 3, 'all', 'result_type', 'all_param', Parameter3)
***获取第二条长线测量结果
get_metrology_object_result (MetrologyHandle, 4, 'all', 'result_type', 'all_param', Parameter4)
***计算两条长线的交点
intersection_lines (Parameter3[0], Parameter3[1], Parameter3[2], Parameter3[3], Parameter4[0], Parameter4[1], Parameter4[2], Parameter4[3], Row6, Column6, IsOverlapping)
***计算两条短线的夹角
angle_ll (Parameter1[0], Parameter1[1], Parameter1[2], Parameter1[3], Parameter2[0], Parameter2[1], Parameter2[2], Parameter2[3], Angle3)
***计算交点到圆心的距离
distance_pp (Row6, Column6, Parameter[0], Parameter[1], Distance)
← 返回列表