Halcon模板匹配定位跟随找圆

检测图像:

Hdevelop代码:

list_image_files ('D:/用户目录/Test', 'default', [], ImageFiles)
read_image (Image,ImageFiles[0])
gen_rectangle2 (Roi_Model, 918.272, 2649.06, rad(-47.7444), 200.86, 111.06)
reduce_domain (Image, Roi_Model, Image_model)
edges_sub_pix (Image_model, Edges, 'canny', 1, 20, 40)
create_shape_model (Image_model, 'auto', rad(0), rad(360), 'auto', 'auto', 'use_polarity', 'auto', 'auto', ModelID)
*以XLD创建模型查找时间较长
* create_shape_model_xld (Edges, 'auto', rad(0), rad(360), 'auto', 'auto', 'ignore_local_polarity', 5, ModelID)
get_shape_model_contours (ModelContours, ModelID, 1)
find_shape_model (Image, ModelID, rad(0), rad(360), 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score)
hom_mat2d_identity (HomMat2DIdentity)
hom_mat2d_translate (HomMat2DIdentity, Row, Column, HomMat2DTranslate)
affine_trans_contour_xld (ModelContours, ContoursAffineTrans, HomMat2DTranslate)
dev_display (ContoursAffineTrans)
stop ()
DataList :=[]
DataList1 := []
for i := 0 to |ImageFiles|-1 by 1
    read_image (Image1, ImageFiles[i])
    find_shape_model (Image1, ModelID, rad(0), rad(360), 0.5, 1, 0.5, 'least_squares', 0, 0.5, Row1, Column1, Angle1, Score1)
    get_shape_model_contours (ModelContours1, ModelID, 1)
    *获取初始模型与当前查找的模型的仿射矩阵
    vector_angle_to_rigid (Row, Column, Angle, Row1, Column1, Angle1, HomMat2D)
*     hom_mat2d_identity (HomMat2DIdentity1)
*     hom_mat2d_translate (HomMat2DIdentity1, Row1, Column1, HomMat2DTranslate1)
*     hom_mat2d_rotate (HomMat2DTranslate1, Angle1, Row1, Column1, HomMat2DRotate)
    affine_trans_contour_xld (Edges, ContoursAffineTrans1, HomMat2D)
    dev_display (ContoursAffineTrans1)
    
    create_metrology_model (MetrologyHandle)
    create_metrology_model (MetrologyHandle1)
    *找圆工具1参数
    CircleModelRow := 862.411
    CircleModelCol := 2949.95
    CircleParam := [862.411, 2949.95, 38.5813]
    
    *找圆工具2参数  
    CircleModelRow1 := 2318.84
    CircleModelCol1 := 981.805
    CircleParam1 := [2318.84, 981.805, 37.2123]
    
    *圆位置变换关系
    affine_trans_point_2d (HomMat2D, CircleModelRow, CircleModelCol, CircleRow, CircleCol)
    
    affine_trans_point_2d (HomMat2D, CircleModelRow1, CircleModelCol1, CircleRow1, CircleCol1)
    
    *添加当前圆的测量模型
    *(1)_generic通用工具
    * (2)_Circle找圆工具
    add_metrology_object_circle_measure (MetrologyHandle, CircleRow, CircleCol, 37.721, 10, 5, 1, 80, [], [], Index)
    
    add_metrology_object_circle_measure (MetrologyHandle1, CircleRow1, CircleCol1, 37.721, 15, 5, 1, 80, [], [], Index1)
    
    
    *适应模型
    apply_metrology_model (Image1, MetrologyHandle)
    
    apply_metrology_model (Image1, MetrologyHandle1)
    
    *获取结果
    get_metrology_object_result (MetrologyHandle, Index, 'all', 'result_type', 'all_param', Parameter)
    
    get_metrology_object_result (MetrologyHandle1, Index1, 'all', 'result_type', 'all_param', Parameter1)
    
    *获取模型用到的点
    get_metrology_object_measures (Contours, MetrologyHandle, 'all', 'all', Row2, Column2)
    
    get_metrology_object_measures (Contours1, MetrologyHandle1, 'all', 'all', Row21, Column21)
    
    *绘制找到的所有点
    gen_cross_contour_xld (Cross, Row2, Column2, 6, 0.785398)
    
    gen_cross_contour_xld (Cross1, Row21, Column21, 6, 0.785398)
    
    *绘制点--->轮廓
    gen_contour_polygon_xld (Contour, Row2, Column2)
    
    gen_contour_polygon_xld (Contour1, Row21, Column21)
    
    *拟合圆
    fit_circle_contour_xld (Contour, 'geometric', -1, 100, 2, 3, 2, Row_Result, Column_Result, Radius, StartPhi, EndPhi, PointOrder)
    
    fit_circle_contour_xld (Contour1, 'geometric', -1, 100, 2, 5, 2, Row_Result1, Column_Result1, Radius1, StartPhi1, EndPhi1, PointOrder1)
    *绘制圆
    gen_circle (Circle, Row_Result, Column_Result, Radius)
    
    gen_circle (Circle1, Row_Result1, Column_Result1, Radius1)
    *绘制圆心
    gen_cross_contour_xld (Cross1, Row_Result, Column_Result, 6, 0)
    
    gen_cross_contour_xld (Cross2, Row_Result1, Column_Result1, 6, 0)
    
    *显示
    dev_set_draw ('margin')
    dev_display (Image1)
    dev_display (ContoursAffineTrans1)
    dev_display (Circle)
    dev_display (Circle1) 
    dev_display (Cross1)
    dev_display (Cross2)
    *将Row,Col添加到Tuple数组
    tuple_insert(DataList, |DataList|, ['Row:'+Row_Result,'    Col:'+Column_Result,'\r'], DataList)
    tuple_insert(DataList1, |DataList1|, ['Row:'+Row_Result1,'    Col:'+Column_Result1,'\r'], DataList1)
    *stop ()
endfor
*保存到txt文件
filepath := 'D:/Halcon/my.txt'
filepath1 := 'D:/Halcon/my1.txt'
file_exists (filepath, FileExists)
open_file (filepath, 'output', FileHandle)
open_file (filepath1, 'output', FileHandle1)
if (FileExists)
    fwrite_string (FileHandle, DataList)
    fwrite_string (FileHandle1, DataList1)
endif

检测结果:

 

  • 3
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Halcon中,模板匹配跟随是通过使用Halcon定位模板匹配功能来实现的。首先,需要确定要跟随的目标模板。然后,使用Halcon模板匹配算法来在图像中搜索并定位目标模板。一种常见的方法是使用FindModelRes函数,该函数根据模板匹配算法的选择,对图像进行形状、灰度、NCC等匹配操作,并返回符合要求的结果。在模板匹配跟随的过程中,还可以通过设置白平衡来调整图像的颜色平衡,以提高匹配的准确性。通过使用这些功能,可以实现Halcon模板匹配跟随功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [实例详解Halcon定位模板匹配](https://download.csdn.net/download/z397164725/7006683)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [基于C#调用halcon实现模板匹配【附部分源码】](https://blog.csdn.net/ctu_sue/article/details/127059696)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HeliosXxzh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值