卡尺測量

read_image (ImageModel, 'image/dip_switch_model.png')
get_image_size (ImageModel, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
dev_display (ImageModel)
dev_set_draw ('margin')
dev_set_color ('yellow')


******************************************************測量窗口製作*********************************************
*左邊測量直線
draw_line (WindowHandle, HoriLeftBeginRowMode, HoriLeftBeginColumnMode, HoriLeftEndRowMode, HoriLeftEndColumnMode)
gen_region_line (HoriLeftLinesMode, HoriLeftBeginRowMode, HoriLeftBeginColumnMode, HoriLeftEndRowMode, HoriLeftEndColumnMode)
dev_display (HoriLeftLinesMode)

*右邊測量直線
draw_line (WindowHandle, HoriRightBeginRowMode, HoriRightBeginColumnMode, HoriRightEndRowMode, HoriRightEndColumnMode)
gen_region_line (HoriRightLinesMode, HoriRightBeginRowMode, HoriRightBeginColumnMode, HoriRightEndRowMode, HoriRightEndColumnMode)
dev_display (HoriRightLinesMode)

stop()

******************************************************創建形狀模板*********************************************
*畫矩形
draw_rectangle2 (WindowHandle, Row, Column, Phi, Length1, Length2)
*生成矩形
gen_rectangle2 (Rectangle, Row, Column, Phi, Length1, Length2)
*剪切矩形區域圖像
reduce_domain (ImageModel, Rectangle, ImageReduced)
*創建形狀模型
create_shape_model (ImageReduced, 'auto', 0, rad(360), 'auto', 'none', 'use_polarity', 30, 10, ModelID)
*create_shape_model_xld (SelectedContoursModel, 'auto', rad(0), rad(90), 'auto', 'auto', 'ignore_local_polarity', 3, ModelID)
*在搜索圖像中搜索模版
find_shape_model (ImageModel, ModelID, 0, rad(360), 0.4, 1, 0, 'least_squares', 0, 0.7, ModelRow, ModelColumn, ModelAngle, ModelScore)
*獲取模板輪廓
get_shape_model_contours (ShapeModel, ModelID, 1)

stop ()

******************************************************測量模型創建*************************************************
 
*創建測量模型
create_metrology_model (MetrologyHandle)
*設置測量對象的圖像大小
set_metrology_model_image_size (MetrologyHandle, Width, Height)
*添加測量直線對象到測量模型中
Line1 := [HoriLeftBeginRowMode, HoriLeftBeginColumnMode, HoriLeftEndRowMode, HoriLeftEndColumnMode]
Line2 := [HoriRightBeginRowMode, HoriRightBeginColumnMode, HoriRightEndRowMode, HoriRightEndColumnMode]
add_metrology_object_generic (MetrologyHandle, 'line', [Line1,Line2], 20, 5, 1, 20, [], [], MetrologyLine)   
*獲取測量模型裏的模型輪廓
get_metrology_object_model_contour (ModelContour, MetrologyHandle, 'all', 1.5)
*獲取測量模型裏的測量區域
get_metrology_object_measures (MeasureContour, MetrologyHandle, 'all', 'all', Row, Column)
*顯示圖像及輪廓
dev_display (ImageModel)
dev_display (ModelContour)
設置測量對象的參考座標系原點在模板座標位置
set_metrology_model_param (MetrologyHandle, 'reference_system', [ModelRow, ModelColumn,0])
stop()

******************************************************開始測試*************************************************
*加載離線圖像
* Image Acquisition 01: Code generated by Image Acquisition 01
ImageFiles := []
ImageFiles[0] := 'image/dip_switch_model.png'
ImageFiles[1] := 'image/dip_switch_training_01.png'
ImageFiles[2] := 'image/dip_switch_training_02.png'
ImageFiles[3] := 'image/dip_switch_training_03.png'
ImageFiles[4] := 'image/dip_switch_training_04.png'
ImageFiles[5] := 'image/dip_switch_training_05.png'
ImageFiles[6] := 'image/dip_switch_training_06.png'
ImageFiles[7] := 'image/dip_switch_training_07.png'
ImageFiles[8] := 'image/dip_switch_training_08.png'
ImageFiles[9] := 'image/dip_switch_training_09.png'
ImageFiles[10] := 'image/dip_switch_training_10.png'
ImageFiles[11] := 'image/dip_switch_training_11.png'
ImageFiles[12] := 'image/dip_switch_training_12.png'

for Index := 0 to |ImageFiles| - 1 by 1
     
        *設置區域填充模式
        dev_set_draw ('fill')
        *讀取圖像
        read_image (Image, ImageFiles[Index])
        *顯示圖像
        dev_display (Image)
        *在搜索圖像中尋找模板
        find_shape_model (Image, ModelID, 0, rad(360), 0.4, 1, 0, 'least_squares', 0, 0.7, SearchRow, SearchColumn, SearchAngle, SearchScore)
        *對齊測量模型
        align_metrology_model (MetrologyHandle, SearchRow, SearchColumn, SearchAngle)
        *測量並對測量區域擬合幾何形狀
        apply_metrology_model (Image, MetrologyHandle)
        *獲取測量結果裏的開始行座標
        get_metrology_object_result (MetrologyHandle, MetrologyLine, 'all', 'result_type', 'row_begin', RowBegin)
        *獲取測量結果裏的開始列座標
        get_metrology_object_result (MetrologyHandle, MetrologyLine, 'all', 'result_type', 'column_begin', ColBegin)
        *獲取測量結果裏的結束行座標
        get_metrology_object_result (MetrologyHandle, MetrologyLine, 'all', 'result_type', 'row_end', RowEnd)
        *獲取測量結果裏的結束列座標
        get_metrology_object_result (MetrologyHandle, MetrologyLine, 'all', 'result_type', 'column_end', ColEnd)
        *獲取測量區域
        get_metrology_object_measures (SearchContour, MetrologyHandle, 'all', 'all', Row, Column)
        *獲取測量結果輪廓
        get_metrology_object_result_contour (MeasuredLines, MetrologyHandle, 'all', 'all', 1.5)
        *顯示測量區域和測量結果輪廓
        dev_set_color ('green')
        dev_display (SearchContour)
        dev_set_color ('blue')
        dev_display (MeasuredLines)

        
        ******************************************************距離計算*****************************************************************************
        *生成兩個直線對象並連接起來
        gen_empty_obj (RegionLine)
        for i:=0 to |RowBegin|-1 by 1
                gen_region_line (Lines, RowBegin[i], ColBegin[i], RowEnd[i], ColEnd[i])
                concat_obj (RegionLine, Lines, RegionLine)
        endfor
        
        *計算兩個直線對象之間的距離
        select_obj (RegionLine, FirstLine, 1)
        select_obj (RegionLine, SecondLine, 2)
        distance_rr_min (FirstLine,SecondLine, MinDistance, Row1, Column1, Row2, Column2)
        *在屏幕坐上方0100位置數值長度值
        dev_set_color ('green')
        set_tposition (WindowHandle, 0, 100)
        write_string (WindowHandle, '兩條直線之間的距離='+MinDistance)
        stop()
      
endfor
stop()
*清除測量模型
clear_metrology_model (MetrologyHandle)

注:僅做學習筆記用,侵刪

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章