加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

halcon之卡尺

(2019-04-14 20:09:56)
分类: 2019年
使用了模板定位+卡尺跟随测量 角度
dev_update_off ()
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
*************************定位模板
read_image (Image, 'C:/Users/mogd3/Desktop/卡尺+定位/11.jpg')
get_image_size (Image, Width, Height)
*
rgb1_to_gray (Image, GrayImage)
threshold (GrayImage, Regions, 0, 110)
dilation_circle (Regions, RegionDilation, 3)
reduce_domain (GrayImage, RegionDilation, ImageReduced)
area_center (RegionDilation, Area, Row1, Column1)
*
inspect_shape_model (ImageReduced, ModelImages, ModelRegions, 4, 30)
create_scaled_shape_model (ImageReduced, 4, rad(0), rad(360), 'auto', 0.8, 1.3, 'auto', 'auto', 'ignore_global_polarity', 20, 30, ModelID)
get_shape_model_contours (ModelContours, ModelID, 1)
stop ()
**********************卡尺模板
*起点的行列
SRow:=[41,41]
SClon:=[98,98]
*终点的行列
MRow:=[70,70]
MClon:=[79,115]
*半宽
releght:=15

**
**创建模型
create_metrology_model (MetrologyHandle)
*设置大小
set_metrology_model_image_size (MetrologyHandle, Width, Height)
*放置卡尺
add_metrology_object_line_measure (MetrologyHandle,SRow, SClon,MRow,MClon,10, 5, 1, 30, [], [], Index1)
*************************设置参考点
gen_rectangle1 (Rectangle, SRow[0]-25, SClon[0]-30,SRow[0]+30, SClon[0]+30)
reduce_domain (GrayImage, Rectangle, ImageReduced1)
threshold (ImageReduced1, Regions1, 0, 56)
get_region_points (Regions1, Rows, Columns)
*设置跟随点
set_metrology_model_param (MetrologyHandle, 'reference_system', [Rows[0], Columns[0],0])



for Index := 1 to 3 by 1
    read_image (Image1, '1'+Index)
    rgb1_to_gray (Image1, GrayImage1)
    find_scaled_shape_model (GrayImage1, ModelID, rad(0), rad(360), 0.9, 1.1, 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Scale, Score)
    *vector_angle_to_rigid (0, 0, 0, Row, Column, Angle, HomMat2D)
    *affine_trans_contour_xld (ModelContours, ContoursAffinTrans, HomMat2D)
     if (Score>0)
    *模板匹配+仿射变换
    vector_angle_to_rigid (Row, Column, Angle, Row1, Column1, 0, HomMat2D1)
    affine_trans_image (GrayImage1, ImageAffinTrans, HomMat2D1, 'constant', 'false')
    *找到新图的参考点
    reduce_domain (ImageAffinTrans, Rectangle, ImageReduced2)
    threshold (ImageAffinTrans, Regions2, 0, 83)
    get_region_points (Regions2, Rows, Columns)
    *设置跟随坐标(变量设置一样)
    align_metrology_model (MetrologyHandle,  Rows[0], Columns[0], 0)
    *测量
    apply_metrology_model (ImageAffinTrans, MetrologyHandle)
    *获取结果
    get_metrology_object_result (MetrologyHandle, 'all', 'all', 'result_type', 'all_param', Parameter)
    *求角度
    angle_ll (Parameter[0], Parameter[1], Parameter[2], Parameter[3], Parameter[4], Parameter[5], Parameter[6], Parameter[7], Angle)
    Angle := deg(Angle)
    *拟合后的轮廓
    get_metrology_object_result_contour (RContour, MetrologyHandle, 'all', 'all', 1.5)
    *求两线段的交点
    intersection_lines (Parameter[0], Parameter[1], Parameter[2], Parameter[3], Parameter[4], Parameter[5], Parameter[6], Parameter[7], Row2, Column2, IsOverlapping)
    *线段1角度
    line_orientation (Parameter[0], Parameter[1], Parameter[2], Parameter[3], Phi)
    *
      if (Phi > 0)
         Phi:= Phi - rad(180)
    endif
    *线段2角度
    line_orientation ( Parameter[4], Parameter[5], Parameter[6], Parameter[7], Phi1)
    *圆弧轮廓
    gen_circle_contour_xld (ContCircle, Row2, Column2, 18, Phi, Phi1, 'positive', 1)
    *测量矩形
    get_metrology_object_measures (Contour, MetrologyHandle, 'all', 'all', MRow, MColumn)
    *十字架
    gen_cross_contour_xld (Cross, MRow, MColumn, 6, rad(45))
    *显示
    dev_display (Image1)
    stop ()
    dev_display (ImageAffinTrans)
    stop ()
    dev_set_line_width (1)
    dev_set_color ('yellow')
    dev_display (Contour)
    stop ()
    dev_set_color ('red')
    dev_display (Cross)
    stop ()
    dev_set_line_width (2)
    dev_set_color ('green')
    dev_display (RContour)
    stop ()
    dev_set_color ('blue')
    dev_display (ContCircle)
    *
    disp_message (WindowHandle, 'Angle = ' + Angle$'.5' + '°', 'window', 12, 12, 'black', 'true')
    if (Index < 3)
        disp_continue_message (WindowHandle, 'black', 'true')
    endif
    stop ()  
     endif
   
endfor
clear_metrology_model (MetrologyHandle)

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有