HALCON示例程序measure_circles.hdev测量圆的半径

示例程序源码(加注释)

  • 关于显示类函数解释
    dev_update_off ()
    read_image (Image, ‘circle_plate’)
    get_image_size (Image, Width, Height)
    dev_close_window ()
    dev_open_window (0, 0, Width / 2, Height / 2, ‘light gray’, WindowID)
    dev_set_part (0, 0, Height - 1, Width - 1)
    dev_set_line_width (3)
    dev_set_color (‘white’)
    dev_set_draw (‘margin’)
    dev_display (Image)
    set_display_font (WindowID, 14, ‘mono’, ‘true’, ‘false’)
    disp_continue_message (WindowID, ‘black’, ‘true’)
    stop ()
    dev_set_colored (12)
    dev_set_line_width (2)
    dev_set_draw (‘fill’)
  • 快速阈值分割,分割连通域,使用面积进行区域筛选,快速筛选出测量区域。
    fast_threshold (Image, Region, 200, 255, 20)
    connection (Region, ConnectedRegions)
    select_shape (ConnectedRegions, SelectedRegions, ‘area’, ‘and’, 70, 50000)
    dev_display (Image)
    dev_display (SelectedRegions)
    disp_continue_message (WindowID, ‘black’, ‘true’)
    stop ()
  • 求取边缘,膨胀,缩减定义域,求取边缘,分割边缘,筛选边缘
    boundary (SelectedRegions, RegionBorder, ‘inner_filled’)
    dilation_circle (RegionBorder, RegionDilation, 3.5)
    union1 (RegionDilation, RegionUnion)
    reduce_domain (Image, RegionUnion, ImageReduced)
    dev_clear_window ()
    dev_display (ImageReduced)
    disp_continue_message (WindowID, ‘black’, ‘true’)
    stop ()
    edges_sub_pix (ImageReduced, Edges, ‘canny’, 1.5, 10, 40)
    segment_contours_xld (Edges, ContoursSplit, ‘lines_circles’, 5, 2, 2)
    select_contours_xld (ContoursSplit, SelectedContours, ‘contour_length’, 25, 99999, -0.5, 0.5)
    count_obj (SelectedContours, NumberContours)
    gen_empty_obj (Circles)
    for i := 1 to NumberContours by 1
    select_obj (SelectedContours, ObjectSelected, i)

    • get_contour_global_attrib_xld - 返回XLD轮廓的全局属性值。cont_approx是椭圆还是圆形?
    • get_contour_global_attrib_xld(轮廓::属性:属性值)
      get_contour_global_attrib_xld (ObjectSelected, ‘cont_approx’, Attrib)
      if (Attrib == 1)
      concat_obj (Circles, ObjectSelected, Circles)
      endif
  • 结束循环
    endfor
  • 合并属于一个圆形的轮廓
    union_cocircular_contours_xld (Circles, UnionContours, rad(60), rad(10), rad(30), 100, 50, 10, ‘true’, 1)
    dev_clear_window ()
    dev_set_color (‘black’)
    dev_display (UnionContours)
    disp_continue_message (WindowID, ‘black’, ‘true’)
    stop ()
    count_obj (UnionContours, NumberCircles)
    CenterRow := []
    CenterColumn := []
    dev_clear_window ()
    dev_set_color (‘black’)
    set_display_font (WindowID, 12, ‘mono’, ‘true’, ‘false’)
    dev_display (SelectedContours)

for i := 1 to NumberCircles by 1
select_obj (UnionContours, ObjectSelected, i)
* 拟合圆形
fit_circle_contour_xld (ObjectSelected, ‘algebraic’, -1, 0, 0, 3, 2, Row, Column, Radius, StartPhi, EndPhi, PointOrder)
gen_circle_contour_xld (ContCircle, Row, Column, Radius, 0, rad(360), ‘positive’, 1.5)
dev_set_color (‘white’)
dev_display (ContCircle)
if (i == 1)
Row2 := Row + Radius * sin(rad(-45))
Column2 := Column + Radius * cos(rad(-45))
set_tposition (WindowID, Row2 - 35, Column2 + 5)
endif
if (i > 1)
exist := 0
for j := 0 to i - 2 by 1
distance_pp (Row, Column, CenterRow[j], CenterColumn[j], DistanceCenters)
if (DistanceCenters < 20)
exist := 1
endif
endfor
if (exist == 1)
Row2 := Row + Radius * sin(rad(-135))
Column2 := Column + Radius * cos(rad(-135))
set_tposition (WindowID, Row2 - 40, Column2 - 30)
else
Row2 := Row + Radius * sin(rad(-45))
Column2 := Column + Radius * cos(rad(-45))
set_tposition (WindowID, Row2 - 35, Column2 + 5)
endif
endif
disp_arrow (WindowID, Row, Column, Row2, Column2, 2)
write_string (WindowID, i)
if (i < 8)
disp_message (WindowID, ‘R’ + i + ’ = ’ + Radius′.4′,′window′,i∗20,130,′black′,′false′)elsedispmessage(WindowID,′R′+i+′=′+Radius'.4', 'window', i * 20, 130, 'black', 'false') else disp_message (WindowID, 'R' + i + ' = ' + Radius′.4′,′window′,i∗20,130,′black′,′false′)elsedispm​essage(WindowID,′R′+i+′=′+Radius’.4’, ‘window’, (i - 7) * 20, 400, ‘black’, ‘false’)
endif
CenterRow := [CenterRow,Row]
CenterColumn := [CenterColumn,Column]
endfor
dev_update_window (‘on’)

处理思路

这个例子是主要讲解了distance_transform算子的应用。

后记
大家有什么问题可以向我提问哈,我看到了第一时间回复,希望在学习的路上多多结交良师益友。

HALCON示例程序measure_circles.hdev测量圆的半径相关推荐

  1. HALCON示例程序particle.hdev测量小圆部分

    HALCON示例程序particle.hdev测量小圆部分 示例程序源码(加注释) 关于显示类函数解释 dev_update_off () dev_close_window () dev_open_w ...

  2. HALCON示例程序inspect_bga.hdev测量bga焊点缺陷

    HALCON示例程序inspect_bga.hdev测量bga焊点缺陷 示例程序源码(加注释) 关于显示类函数解释 read_image (Image, 'bga_14x14_model') get_ ...

  3. HALCON示例程序measure_ring.hdev齿轮齿宽度测量

    HALCON示例程序measure_ring.hdev齿轮齿宽度测量 示例程序源码(加注释) 关于显示类函数解释 read_image (Image, 'rings_and_nuts') dev_cl ...

  4. HALCON示例程序measure_pump.hdev螺纹孔位置与尺寸测量

    HALCON示例程序measure_pump.hdev螺纹孔位置与尺寸测量 示例程序源码(加注释) 关于显示类函数解释 dev_update_var ('off') dev_update_off () ...

  5. HALCON示例程序measure_metal_part_first_example.hdev通过拟合边缘进行尺寸测量

    HALCON示例程序measure_metal_part_first_example.hdev通过拟合边缘进行尺寸测量 示例程序源码(加注释) 关于显示类函数解释 dev_update_off () ...

  6. HALCON示例程序vessel.hdev血管的分割与测量

    小哥哥小姐姐觉得有用点个赞呗! HALCON示例程序vessel.hdev血管的分割与测量 示例程序源码(加注释) 关于显示类函数解释 dev_update_window ('off') dev_cl ...

  7. HALCON示例程序measure_screw.hdev螺纹尺寸测量

    HALCON示例程序measure_screw.hdev螺纹尺寸测量 示例程序源码(加注释) 关于显示类函数解释 dev_update_off () read_image (Image, 'screw ...

  8. HALCON示例程序measure_metal_part_extended.hdev金属零件尺寸测量

    HALCON示例程序measure_metal_part_extended.hdev金属零件尺寸测量 示例程序源码(加注释) 关于显示类函数解释 dev_update_off () read_imag ...

  9. HALCON示例程序measure_ball_bond.hdev电路板焊点位置测量

    HALCON示例程序measure_ball_bond.hdev电路板焊点位置测量 示例程序源码(加注释) 关于显示类函数解释 dev_update_off () dev_close_window ( ...

最新文章

  1. python正则表达式提取数字比较好_python正则表达式从字符串中提取数字的思路详解...
  2. 如何用Java代码在SAP Marketing Cloud里创建contact数据
  3. mysql optimize 作用_mysql optimize table
  4. h5链接加上 vconsole_又出爆款!凯美瑞和红旗H5没法比!
  5. ESXi主机管理内存资源的方式
  6. 没光驱怎么重装电脑系
  7. 如何经由PHP获得MySQL procedure结果
  8. 当AS3遇见Swift
  9. micropython入门教程-【ESP8266】MicroPython的快速入门教程
  10. ARM寄存器的操作方法
  11. Asymptotic efficiency of nonparametric tests笔记(正在进行中)
  12. a0图框标题栏尺寸_机械制图标准中规定的标题栏尺寸
  13. amoeba实现mysql主从读写分离_MySQL+Amoeba实现数据库主从复制和读写分离
  14. 青蛙跳台阶(pta)
  15. 用U盘做系统安装盘的极简方法
  16. Ubuntu18.04 flash插件安装
  17. 腾讯首发Linux内核源码《嵌入式开发进阶笔记》差距差的不止一点点哦
  18. 前端js之JavaScript
  19. 【教学类-29-03】20230409《门牌号-黏贴版(5层*5间)灰底下划线》-(中班《我爱我家》偏数学)
  20. android获取ro._怎么去获取现成机器的ro.hardware值

热门文章

  1. 大三实验室 经验总结
  2. document.getElementsByName 标准
  3. weekendplan
  4. jquery.lazyload.js详解
  5. JS生成动态表格并为每个单元格添加单击事件的方法
  6. 看YYModel源码的一些收获
  7. SQL语法(1、安装操作)
  8. C#动态加载dll,dll目录指定
  9. 虚拟机vmware的连接方式以及IP端口,协议等概念
  10. 手机广告投放(phone advertising)唯一标识