zoukankan      html  css  js  c++  java
  • 模板匹配加测量Demo

    * This example program shows the use of pattern matching with shape models
    * to locate an object. Furthermore, it shows how to use the detected position
    * and rotation of the object to construct search spaces for inspection tasks.
    * In this particular example, the print on an IC is used to find the IC. From the
    * found position and rotation, two measurement rectangles are constructed to
    * measure the spacing between the leads of the IC. Because of the lighting
    * used in this example, the leads have the saturated gray value of 255 at several
    * positions and rotations, which enlarges the apparent width of the leads, and
    * hence seems to reduce the spacing between the leads, although the same
    * board is used in all images.
    dev_update_pc ('off')
    dev_update_window ('off')
    dev_update_var ('off')
    open_framegrabber ('File', 1, 1, 0, 0, 0, 0, 'default', -1, 'default', -1, 'default', 'board/board.seq', 'default', -1, 1, FGHandle)
    grab_image (Image, FGHandle)
    get_image_size (Image, Width, Height)
    dev_close_window ()
    dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
    dev_open_window (Height + 70, 0, Width, 120, 'black', WindowHandleText)
    dev_set_window (WindowHandle)
    set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
    set_display_font (WindowHandleText, 16, 'mono', 'true', 'false')
    dev_set_color ('red')
    dev_display (Image)
    Row1 := 188
    Column1 := 182
    Row2 := 298
    Column2 := 412
    gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)
    area_center (Rectangle, Area, Row, Column)
    Rect1Row := -102
    Rect1Col := 5
    Rect2Row := 107
    Rect2Col := 5
    RectPhi := 0
    RectLength1 := 170
    RectLength2 := 5
    gen_rectangle2 (Rectangle1, Row + Rect1Row, Column + Rect1Col, RectPhi, RectLength1, RectLength2)
    gen_rectangle2 (Rectangle2, Row + Rect2Row, Column + Rect2Col, RectPhi, RectLength1, RectLength2)
    reduce_domain (Image, Rectangle, ImageReduced)
    create_shape_model (ImageReduced, 4, 0, rad(360), rad(1), 'none', 'use_polarity', 30, 10, ModelID)
    get_shape_model_contours (ShapeModel, ModelID, 1)
    hom_mat2d_identity (HomMat2DIdentity)
    hom_mat2d_translate (HomMat2DIdentity, Row, Column, HomMat2DTranslate)
    affine_trans_contour_xld (ShapeModel, ShapeModelTrans, HomMat2DTranslate)
    dev_display (Image)
    dev_set_color ('green')
    dev_display (ShapeModelTrans)
    dev_set_color ('blue')
    dev_set_draw ('margin')
    dev_set_line_width (3)
    dev_display (Rectangle1)
    dev_display (Rectangle2)
    dev_set_draw ('fill')
    dev_set_line_width (1)
    dev_set_color ('yellow')
    disp_message (WindowHandle, ['Press left button to start','and stop the demo'], 'window', 12, 12, 'black', 'true')
    get_mbutton (WindowHandle, Row3, Column3, Button1)
    wait_seconds (0.5)
    Button := 0
    while (Button != 1)
    dev_set_window (WindowHandle)
    dev_set_part (0, 0, Height - 1, Width - 1)
    grab_image (ImageCheck, FGHandle)
    dev_display (ImageCheck)
    count_seconds (S1)
    find_shape_model (ImageCheck, ModelID, 0, rad(360), 0.7, 1, 0.5, 'least_squares', 4, 0.7, RowCheck, ColumnCheck, AngleCheck, Score)
    count_seconds (S2)
    dev_display (ImageCheck)
    if (|Score| > 0)
    dev_set_color ('green')
    hom_mat2d_identity (HomMat2DIdentity)
    hom_mat2d_translate (HomMat2DIdentity, RowCheck, ColumnCheck, HomMat2DTranslate)
    hom_mat2d_rotate (HomMat2DTranslate, AngleCheck, RowCheck, ColumnCheck, HomMat2DRotate)
    affine_trans_contour_xld (ShapeModel, ShapeModelTrans, HomMat2DRotate)
    dev_display (ShapeModelTrans)
    affine_trans_pixel (HomMat2DRotate, Rect1Row, Rect1Col, Rect1RowCheck, Rect1ColCheck)  //对一组点(像素)进行防射变换
    affine_trans_pixel (HomMat2DRotate, Rect2Row, Rect2Col, Rect2RowCheck, Rect2ColCheck)
    gen_rectangle2 (Rectangle1Check, Rect1RowCheck, Rect1ColCheck, AngleCheck, RectLength1, RectLength2)
    gen_rectangle2 (Rectangle2Check, Rect2RowCheck, Rect2ColCheck, AngleCheck, RectLength1, RectLength2)
    dev_set_color ('blue')
    dev_set_draw ('margin')
    dev_set_line_width (3)
    dev_display (Rectangle1Check)
    dev_display (Rectangle2Check)
    dev_set_draw ('fill')
    count_seconds (S3)
    gen_measure_rectangle2 (Rect1RowCheck, Rect1ColCheck, AngleCheck, RectLength1, RectLength2, Width, Height, 'bilinear', MeasureHandle1)
    gen_measure_rectangle2 (Rect2RowCheck, Rect2ColCheck, AngleCheck, RectLength1, RectLength2, Width, Height, 'bilinear', MeasureHandle2)
    measure_pairs (ImageCheck, MeasureHandle1, 2, 90, 'positive', 'all', RowEdgeFirst1, ColumnEdgeFirst1, AmplitudeFirst1, RowEdgeSecond1, ColumnEdgeSecond1, AmplitudeSecond1, IntraDistance1, InterDistance1)
    measure_pairs (ImageCheck, MeasureHandle2, 2, 90, 'positive', 'all', RowEdgeFirst2, ColumnEdgeFirst2, AmplitudeFirst2, RowEdgeSecond2, ColumnEdgeSecond2, AmplitudeSecond2, IntraDistance2, InterDistance2)
    close_measure (MeasureHandle1)
    close_measure (MeasureHandle2)
    count_seconds (S4)
    dev_set_color ('red')
    disp_line (WindowHandle, RowEdgeFirst1 - RectLength2 * cos(AngleCheck), ColumnEdgeFirst1 - RectLength2 * sin(AngleCheck), RowEdgeFirst1 + RectLength2 * cos(AngleCheck), ColumnEdgeFirst1 + RectLength2 * sin(AngleCheck))
    disp_line (WindowHandle, RowEdgeSecond1 - RectLength2 * cos(AngleCheck), ColumnEdgeSecond1 - RectLength2 * sin(AngleCheck), RowEdgeSecond1 + RectLength2 * cos(AngleCheck), ColumnEdgeSecond1 + RectLength2 * sin(AngleCheck))
    disp_line (WindowHandle, RowEdgeFirst2 - RectLength2 * cos(AngleCheck), ColumnEdgeFirst2 - RectLength2 * sin(AngleCheck), RowEdgeFirst2 + RectLength2 * cos(AngleCheck), ColumnEdgeFirst2 + RectLength2 * sin(AngleCheck))
    disp_line (WindowHandle, RowEdgeSecond2 - RectLength2 * cos(AngleCheck), ColumnEdgeSecond2 - RectLength2 * sin(AngleCheck), RowEdgeSecond2 + RectLength2 * cos(AngleCheck), ColumnEdgeSecond2 + RectLength2 * sin(AngleCheck))
    dev_set_line_width (1)
    NumLeads := |IntraDistance1| + |IntraDistance2|
    MinDistance := min([InterDistance1,InterDistance2])
    dev_set_window (WindowHandleText)
    dev_set_part (0, 0, 119, Width - 1)
    dev_clear_window ()
    disp_message (WindowHandleText, 'Matching: Time: ' + ((S2 - S1) * 1000)$'5.2f' + 'ms , Score: ' + Score$'7.5f', 'image', 20, 20, 'green', 'false')
    disp_message (WindowHandleText, 'Measure: Time: ' + ((S4 - S3) * 1000)$'5.2f' + ' ms, Num. leads: ' + NumLeads$'2d', 'image', 50, 20, 'red', 'false')
    disp_message (WindowHandleText, ' Min. lead dist: ' + MinDistance$'6.3f', 'image', 80, 20, 'red', 'false')
    endif
    dev_error_var (Error, 1)  //使用错误代码
    dev_set_check ('~give_error')  // 关闭系统错误默认行为--直接抛出,没有try-catch的情况下
    get_mposition (WindowHandle, R, C, Button)
    dev_error_var (Error, 0)  //关闭错误代码
    dev_set_check ('give_error') //恢复默认行为--没有try-catch的情况下回中断程序执行
    if (Error != H_MSG_TRUE)  //H_MSG_TRUE是没有错误,不等于表示遇到错误了
    Button := 0
    endif
    endwhile
    dev_set_window (WindowHandleText)
    dev_close_window ()
    clear_shape_model (ModelID)
    close_framegrabber (FGHandle)

  • 相关阅读:
    Pycharm 设置python文件自动生成头部信息模板
    Python3.0 调用HTMLTestRunner生成的报告中不能显示用例中print函数的输出
    Python3.0 操作MySQL数据库执行SQL语句
    js时间戳转为日期格式
    Vue脚手架(vue-cli)安装总结
    Vue的生命周期
    常用的ES6语法
    学习python登录demo
    CSS的垂直居中和水平居中总结
    CSS清除浮动方法总结
  • 原文地址:https://www.cnblogs.com/wdfrog/p/15108958.html
Copyright © 2011-2022 走看看