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

示例程序源码(加注释)

  • 关于显示类函数解释
    dev_update_off ()
    dev_close_window ()
    FileName := ‘bonds/ball_bond_ccd_’
    read_image (Image, FileName + 1$‘02’)
    dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
    dev_set_line_width (2)
    set_display_font (WindowHandle, 16, ‘mono’, ‘true’, ‘false’)
    dev_set_draw (‘margin’)
    get_system (‘store_empty_region’, StoreEmptyRegion)
    set_system (‘store_empty_region’, ‘false’)
  • 定义变量并初始化
    NumImages := 6
    for Index := 1 to NumImages by 1
    read_image (Image, FileName + Index$‘02’)
    dev_display (Image)

    • 获得运行时间
      count_seconds (S1)
    • 二值化
      threshold (Image, Region, 135, 255)
    • 分割连通域
      connection (Region, ConnectedRegions)
    • 使用宽度高度面积进行区域筛选
      select_shape (ConnectedRegions, SelectedRegions, [‘width’,‘height’,‘area’], ‘and’, [115,115,5000], [130,130,15000])
      fill_up (SelectedRegions, RegionFillUp)
      shape_trans (RegionFillUp, Pads, ‘convex’)
    • 求取内孔区域
      difference (Pads, RegionFillUp, RegionDifference)
    • 开运算
      opening_rectangle1 (RegionDifference, BondWire, 10, 10)
    • 求取最大内切圆
      shape_trans (BondWire, BallBonds, ‘inner_circle’)
    • select_shape_proto基于区域之间的某些关系选择区域,这里使用重叠区域
    • select_shape_proto(测量区域,对比区域:筛选出的区域:关系,最小值,最大值:)
      select_shape_proto (Pads, BallBonds, MissingBonds, ‘overlaps_rel’, 0, 0)
      count_seconds (S2)
      Time := (S2 - S1) * 1000
    • 膨胀
      dilation_circle (BallBonds, RegionDilation2, 10)
    • 求交集
      intersection (RegionDilation2, BondWire, RegionIntersection)
    • 求边缘的老方法了,之前的贴子传送门
      boundary (RegionIntersection, RegionBorder, ‘inner’)
      dilation_circle (RegionBorder, RegionDilation, 3.5)
      union1 (RegionDilation, RegionUnion)
      reduce_domain (Image, RegionUnion, ImageReduced)
      edges_sub_pix (ImageReduced, Edges, ‘canny’, 1, 20, 70)
    • union_adjacent_contours_xld - 计算端点靠近的轮廓的并集。
    • union_adjacent_contours_xld(边缘:合并的边缘:端点最大绝对阈值,端点最大相对阈值,模式:)
      union_adjacent_contours_xld (Edges, UnionContours, 10, 1, ‘attr_keep’)
    • 筛选XLD轮廓
      select_contours_xld (UnionContours, SelectedContours, ‘contour_length’, 20, 20000, -0.5, 0.5)
    • 通过XLD轮廓拟合圆形
      fit_circle_contour_xld (SelectedContours, ‘atukey’, -1, 0, 0, 5, 7, CircleRow, CircleColumn, Radius, StartPhi, EndPhi, PointOrder)
    • 绘制XLD轮廓圆形
      gen_circle_contour_xld (ContCircle, CircleRow, CircleColumn, Radius, 0, 6.28318, ‘positive’, 1)
      count_obj (BondWire, NBonds)
      gen_empty_obj (MeasureArrows)
    • 下边这些就非常简单的啦
      dev_display (Image)
      dev_set_color (‘cyan’)
      dev_display (ContCircle)
      dev_set_color (‘magenta’)
      area_center (RegionDilation2, Area, Row, Column)
      area_center (MissingBonds, AreaM, RowM, ColumnM)
      select_shape_proto (Pads, BallBonds, BallTooClose, ‘distance_contour’, 0, 10)
      area_center (BallTooClose, AreaB, RowB, ColumnB)
      dev_set_color (‘yellow’)
      dev_display (Pads)
      if (|AreaM| > 0 or |AreaB| > 0)
      dev_set_color (‘red’)
      dev_display (MissingBonds)
      dev_display (BallTooClose)
      for IndexE := 0 to |AreaM| - 1 by 1
      NRow := RowM[IndexE]
      NCol := ColumnM[IndexE]
      disp_message (WindowHandle, ‘Ball bond\nis missing’, ‘image’, NRow - 150, NCol - 110, ‘red’, ‘true’)
      endfor
      for IndexE := 0 to |AreaB| - 1 by 1
      NRow := RowB[IndexE]
      NCol := ColumnB[IndexE]
      disp_message (WindowHandle, ‘Ball bond is too\nclose to border’, ‘image’, NRow - 150, NCol - 150, ‘red’, ‘true’)
      endfor
      endif
      for IndexM := 1 to NBonds by 1
      select_obj (ContCircle, ObjectSelected, IndexM)

      • 求取XLD轮廓的最小外接矩形
        smallest_rectangle1_xld (ObjectSelected, minY, minX, maxY, maxX)
      • 求取XLD轮廓中心
        area_center_xld (ObjectSelected, Area1, Ybb, Xbb, PointOrder1)
      • 绘制XLD箭头
        gen_arrow_contour_xld (Arrow, Ybb, Xbb, minY, Xbb, 12, 12)
        concat_obj (MeasureArrows, Arrow, MeasureArrows)
        gen_arrow_contour_xld (Arrow, Ybb, Xbb, maxY, Xbb, 12, 12)
        concat_obj (MeasureArrows, Arrow, MeasureArrows)
        dev_set_color (‘green’)
        dev_display (MeasureArrows)
        select_obj (ContCircle, ObjectSelected, IndexM)
        area_center_xld (ObjectSelected, Area2, Ybb, Xbb, PointOrder2)
        disp_message (WindowHandle, (2 * Radius[IndexM - 1])KaTeX parse error: Expected 'EOF', got '\nin' at position 129: …ond(s) detected\̲n̲i̲n̲ ̲' + Time’.2f’ + ’ ms’, ‘window’, 12, 12, ‘black’, ‘true’)
    • Evaluate and display results
      if (Index != NumImages)
      disp_continue_message (WindowHandle, ‘black’, ‘true’)
      stop ()
      endif
      endfor
      set_system (‘store_empty_region’, StoreEmptyRegion)

处理思路

这个例子是主要讲解了使用blob分析方法,结合XLD轮廓拟合,对电路焊点的检测与测量。count_seconds计时算子select_shape_proto、union_adjacent_contours_xld、select_contours_xld、fit_circle_contour_xld、gen_circle_contour_xld、gen_arrow_contour_xld、smallest_rectangle1_xld、area_center_xld、gen_arrow_contour_xld

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

HALCON示例程序measure_ball_bond.hdev电路板焊点位置测量相关推荐

  1. HALCON示例程序measure_circuit_width_lines_gauss.hdev电路板线宽检测

    HALCON示例程序measure_circuit_width_lines_gauss.hdev电路板线宽检测 示例程序源码(加注释) 关于显示类函数解释 dev_update_off () dev_ ...

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

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

  3. HALCON示例程序check_fish_stick_dimension.hdev生鱼棒尺寸测量;基于形态学的像素级精度尺寸测量

    HALCON示例程序check_fish_stick_dimension.hdev基于形态学的像素级精度尺寸测量 示例程序源码(加注释) 关闭实时显示更新 dev_update_off () 关闭窗口 ...

  4. HALCON示例程序board.hdev检测电路板焊锡有无程序剖析

    HALCON示例程序board.hdev检测电路板焊锡有无程序剖析 示例程序源码(加注释) *这是关于系统设置的函数,剪辑区域,设置剪辑区域设置为使能.为clip_region做的设置,后文会介绍 g ...

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

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

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

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

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

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

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

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

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

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

最新文章

  1. java数据类型_java 数据类型
  2. tomcat8配置tomcat-users.xml不生效
  3. HTML中字体的垂直排列
  4. QT技术应用_2D绘图(转)
  5. [机器学习] 分类 --- Support Vector Machine (SVM)
  6. 上传图片和音频到DB
  7. 必须声明标量变量是什么意思_机器视觉学习之halcon系列---一文带你理解handle变量是什么意思...
  8. c语言什么是关键字,c语言关键字是什么
  9. 基于javaweb+mysql的+JPA学生宿舍学生住宿申请管理系统(管理员、学生)
  10. xlsxwriter去掉网格线_(原创)xlsxwriter,python excel 写入数据\图表等操作_图表操作(二)...
  11. 编程代码分析-使用winsock搜索蓝牙设备
  12. java+mysql基于JSP0801报刊订阅系统(java,web)
  13. win+e替换为xyplorer打开
  14. Postgresql语句持续更新
  15. 国内有名的文化与教育调查研究咨询公司
  16. Python 实现 PDF转图片 图片转PDF
  17. Git常用命令(汇总)
  18. 判断是否为Debug模式
  19. oracle查询各个年级的总分数,1、查询各班各科分数最高的学生学号,姓名,班级名称,科目名称,分数:...
  20. 20100919星期天最折腾的一天。

热门文章

  1. 什么情况下会调用到session_destroy()
  2. 数据结构(复习)--------关于平衡二叉树(转载)
  3. 【unity3d--初始学习五--c#脚本对xml文件的创建和解析】
  4. XHTML标签的嵌套规则
  5. sqlserver学习3---sql函数
  6. mysql三-3:完整性约束
  7. Chrome Android 60.X+ 不能自动播放audio音频的解决办法
  8. 向上弹出菜单jQuery插件
  9. 《c专家编程》笔记--define和typedef的区别
  10. spring-core