• 跟我学机器视觉HALCON学习例程中文详解IC引脚测量


    跟我学机器视觉-HALCON学习例程中文详解-IC引脚测量

    • Lead Measurement: Example for the application of the measure object

    • including a lot of visualization operators.

    • First, the length of the leads is measured, then, their width and distance from each other.

    • First, read in the image and initialize the program

    read_image (Image, 'ic_pin')

    ********取得图像第一通道的指针,同时得到图像宽度高度

    get_image_pointer1 (Image, Pointer, Type, Width, Height)

    dev_close_window ()

    dev_open_window_fit_image (Image, 0, 0, 509, 509, WindowHandle)

    set_display_font (WindowHandle, 14, 'mono', 'true', 'false')

    dev_display (Image)

    显示图像如下:************************

    dev_set_draw ('margin')

    dev_set_line_width (3)

    • Define and display the rectangular ROIs within which the edges will be detected

    Row := 55

    RowBottom := 955

    Column := 200

    Phi := rad(-90)

    Length1 := 50

    Length2 := 35

    dev_set_color ('gray')

    gen_rectangle2 (Rectangle, Row, Column, Phi, Length1, Length2)

    gen_rectangle2 (Rectangle, RowBottom, Column, Phi, Length1, Length2)

    测量位置如绿色矩形所示下:*

    disp_continue_message (WindowHandle, 'black', 'true')

    stop ()

    • Create a measure object for the ROI at the top of the image.

    获取一阶灰度剖面图的插值方法,测量矩形框与图像坐标系之间有角度时生效

    Interpolation := 'nearest_neighbor'

    生成测量矩形框,先测上部

    gen_measure_rectangle2 (Row, Column, Phi, Length1, Length2, Width, Height, Interpolation, MeasureHandle)

    • Determine all edges and calculate the lead height at the top of the image

    Sigma := 1.0

    Threshold := 30

    Transition := 'all'

    Select := 'all'

    ******进行测量

    measure_pos (Image, MeasureHandle, Sigma, Threshold, Transition, Select, RowEdge, ColumnEdge, Amplitude, Distance)

    LeadLength1 := Distance

    • Display the results

    dev_set_color ('white')

    ******将测量结果画出

    disp_line (WindowHandle, RowEdge, ColumnEdge-Length2, RowEdge, ColumnEdge+Length2)

    disp_message (WindowHandle, 'Lead Length: '+LeadLength1$'.2f', 'window', RowEdge[1]+40, ColumnEdge[1]+100, 'yellow', 'false')

    • Shift the measure object and determine the lead height at the bottom of the image

    ******转移测量框至新的参考坐标点,及测量下部

    translate_measure (MeasureHandle, RowBottom, Column)

    ******进行测量

    measure_pos (Image, MeasureHandle, Sigma, Threshold, Transition, Select, RowEdge, ColumnEdge, Amplitude, Distance)

    LeadLength2 := Distance

    • Display the results

    dev_set_color ('white')

    ******将测量结果画出

    disp_line (WindowHandle, RowEdge, ColumnEdge-Length2, RowEdge, ColumnEdge+Length2)

    disp_message (WindowHandle, 'Lead Length: '+LeadLength2$'.2f', 'window', 360, ColumnEdge[1]+100, 'red', 'false')

    • Close the measure

    close_measure (MeasureHandle)

    disp_continue_message (WindowHandle, 'black', 'true')

    stop ()

    • Now, define and display a rectangular ROI perpendicular to the leads and create the measure

    dev_display (Image)

    Row := 47

    Column := 485

    Phi := 0

    Length1 := 420

    Length2 := 8

    Interpolation := 'nearest_neighbor'

    dev_set_color ('black')

    创建新的测量矩形ROI,如图蓝色矩形:

    gen_rectangle2 (Rectangle, Row, Column, Phi, Length1, Length2)

    gen_measure_rectangle2 (Row, Column, Phi, Length1, Length2, Width, Height, Interpolation, MeasureHandle)

    • Determine all edge pairs that have a negative transition, i.e., edge pairs

    • that enclose dark regions.

    Sigma := 1.0

    Threshold := 30

    Transition := 'negative'

    Select := 'all'

    *****进行测量计算并显示结果

    measure_pairs (Image, MeasureHandle, Sigma, Threshold, Transition, Select, RowEdgeFirst, ColumnEdgeFirst, AmplitudeFirst, RowEdgeSecond, ColumnEdgeSecond, AmplitudeSecond, IntraDistance, InterDistance)

    disp_continue_message (WindowHandle, 'black', 'true')

    stop ()

    dev_set_color ('white')

    disp_line (WindowHandle, RowEdgeFirst, ColumnEdgeFirst, RowEdgeSecond, ColumnEdgeSecond)

    avgLeadWidth := sum(IntraDistance)/|IntraDistance|

    avgLeadDistance := sum(InterDistance)/|InterDistance|

    numLeads := |IntraDistance|

    disp_message (WindowHandle, 'Number of Leads: '+numLeads, 'window', 200, 100, 'yellow', 'false')

    disp_message (WindowHandle, 'Average Lead Width: '+avgLeadWidth$'.2f', 'window', 260, 100, 'yellow', 'false')

    disp_message (WindowHandle, 'Average Lead Distance: '+avgLeadDistance$'.2f', 'window', 320, 100, 'yellow', 'false')

    disp_continue_message (WindowHandle, 'black', 'true')

    disp_continue_message (WindowHandle, 'black', 'true')

    stop ()

    • Zoom in to visualize the measurement results in more detail.

    • First, define and display the zoom window.

    Row1 := 0

    Column1 := 600

    Row2 := 100

    Column2 := 700

    dev_set_color ('blue')

    *********设置放大区域矩形并显示,图中绿色矩形

    disp_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2)

    disp_continue_message (WindowHandle, 'black', 'true')

    stop ()

    • Then, zoom the image and display the results.

    设置图像放大区域并显示*************

    dev_set_part (Row1, Column1, Row2, Column2)

    dev_display (Image)

    dev_set_color ('black')

    画出测量矩形ROI和测得的边缘如图***

    dev_display (Rectangle)

    p_disp_edge_marker (RowEdgeFirst, ColumnEdgeFirst, Phi, 5, 'white', 3, WindowHandle)

    p_disp_edge_marker (RowEdgeSecond, ColumnEdgeSecond, Phi, 5, 'white', 3, WindowHandle)

    • Close the measure

    close_measure (MeasureHandle)

    • Reset the display parameters.

    dev_set_part (0, 0, Height-1, Width-1)

    dev_set_draw ('fill')

    dev_set_line_width(1)

  • 相关阅读:
    关于代码片段
    感谢visual studio(git插件)救我一命
    SRX一些配置命令
    .NET Core Policy和Claim
    .NET Core Identity 用户管理和策略
    .NET Core基础配置、注册服务、中间件、ViewComponent、DbContext
    table非常细边框
    js数字转大写金额
    蓝牙开发
    Laravel artisan 命令
  • 原文地址:https://www.cnblogs.com/chita/p/3620773.html
Copyright © 2020-2023  润新知