日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時間:2023/12/10 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HALCON示例程序measure_metal_part_first_example.hdev通过拟合边缘进行尺寸测量 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

HALCON示例程序measure_metal_part_first_example.hdev通過擬合邊緣進行尺寸測量

示例程序源碼(加注釋)

  • 關于顯示類函數解釋
    dev_update_off ()
    read_image (Image, ‘metal-parts/metal-parts-01’)
    get_image_size (Image, Width, Height)
    dev_close_window ()
    dev_open_window (0, 0, Width, Height, ‘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, 16, ‘mono’, ‘true’, ‘false’)
    stop ()
    dev_set_draw (‘fill’)
  • 二值化
    threshold (Image, Region, 100, 255)
  • 求取區(qū)域中心
    area_center (Region, AreaRegion, RowCenterRegion, ColumnCenterRegion)
  • 使用橢圓擬合求取區(qū)域角度
    orientation_region (Region, OrientationRegion)
    dev_display (Region)
    disp_message (WindowID, ‘Center Row: ’ + RowCenterRegion′.5′,′window′,20,10,′white′,′false′)dispmessage(WindowID,′Area:′+AreaRegion+′pixel′,′window′,20,300,′white′,′false′)dispmessage(WindowID,′CenterColumn:′+ColumnCenterRegion'.5', 'window', 20, 10, 'white', 'false') disp_message (WindowID, 'Area: ' + AreaRegion + ' pixel', 'window', 20, 300, 'white', 'false') disp_message (WindowID, 'Center Column: ' + ColumnCenterRegion.5,window,20,10,white,false)dispm?essage(WindowID,Area:+AreaRegion+pixel,window,20,300,white,false)dispm?essage(WindowID,CenterColumn:+ColumnCenterRegion’.5’, ‘window’, 60, 10, ‘white’, ‘false’)
    disp_message (WindowID, ‘Orientation: ’ + OrientationRegion$’.3’ + ’ rad’, ‘window’, 60, 300, ‘white’, ‘false’)
    dev_set_color (‘gray’)
    disp_cross (WindowID, RowCenterRegion, ColumnCenterRegion, 15, 0)
    disp_arrow (WindowID, RowCenterRegion, ColumnCenterRegion, RowCenterRegion - 60 * sin(OrientationRegion), ColumnCenterRegion + 60 * cos(OrientationRegion), 2)
    stop ()
  • 提取邊緣
    edges_sub_pix (Image, Edges, ‘canny’, 0.6, 30, 70)
  • 分割邊緣
    segment_contours_xld (Edges, ContoursSplit, ‘lines_circles’, 6, 4, 4)
    dev_clear_window ()
    dev_set_colored (12)
    dev_display (ContoursSplit)
    stop ()
    dev_open_window (0, round(Width / 2), (535 - 225) * 2, (395 - 115) * 2, ‘black’, WindowHandleZoom)
    dev_set_part (round(115), round(225), round(395), round(535))
    set_display_font (WindowHandleZoom, 18, ‘mono’, ‘true’, ‘false’)
    count_obj (ContoursSplit, NumSegments)
    dev_display (Image)
    NumCircles := 0
    RowsCenterCircle := []
    ColumnsCenterCircle := []
    disp_message (WindowHandleZoom, 'Circle radii: ', ‘window’, 120, 230, ‘white’, ‘false’)
for i := 1 to NumSegments by 1select_obj (ContoursSplit, SingleSegment, i)* 獲取xld輪廓屬性,是圓形橢圓還是直線get_contour_global_attrib_xld (SingleSegment, 'cont_approx', Attrib)if (Attrib == 1)NumCircles := NumCircles + 1* 擬合圓形fit_circle_contour_xld (SingleSegment, 'atukey', -1, 2, 0, 5, 2, Row, Column, Radius, StartPhi, EndPhi, PointOrder)* 繪制圓形gen_circle_contour_xld (ContCircle, Row, Column, Radius, 0, rad(360), 'positive', 1)RowsCenterCircle := [RowsCenterCircle,Row]ColumnsCenterCircle := [ColumnsCenterCircle,Column]dev_display (ContCircle)disp_message (WindowHandleZoom, 'C' + NumCircles, 'window', Row - Radius - 10, Column, 'white', 'false')disp_message (WindowHandleZoom, 'C' + NumCircles + ': Radius = ' + Radius$'.4', 'window', 275 + NumCircles * 15, 230, 'white', 'false')endif endfor distance_pp (RowsCenterCircle[1], ColumnsCenterCircle[1], RowsCenterCircle[2], ColumnsCenterCircle[2], Distance_2_3) disp_line (WindowHandleZoom, RowsCenterCircle[1], ColumnsCenterCircle[1], RowsCenterCircle[2], ColumnsCenterCircle[2]) disp_message (WindowHandleZoom, 'Distance C2-C3 = ' + Distance_2_3$'.4', 'window', 275 + (NumCircles + 3) * 15, 230, 'magenta', 'false') distance_pp (RowsCenterCircle[0], ColumnsCenterCircle[0], RowsCenterCircle[2], ColumnsCenterCircle[2], Distance_1_3) disp_line (WindowHandleZoom, RowsCenterCircle[0], ColumnsCenterCircle[0], RowsCenterCircle[2], ColumnsCenterCircle[2]) disp_message (WindowHandleZoom, 'Distance C1-C3 = ' + Distance_1_3$'.4', 'window', 275 + (NumCircles + 2) * 15, 230, 'yellow', 'false') distance_pp (RowsCenterCircle[3], ColumnsCenterCircle[3], RowsCenterCircle[4], ColumnsCenterCircle[4], Distance_4_5) disp_line (WindowHandleZoom, RowsCenterCircle[3], ColumnsCenterCircle[3], RowsCenterCircle[4], ColumnsCenterCircle[4]) disp_message (WindowHandleZoom, 'Distance C4-C5 = ' + Distance_4_5$'.4', 'window', 275 + (NumCircles + 4) * 15, 230, 'cyan', 'false') stop ()

dev_set_window (WindowHandleZoom)
dev_close_window ()
dev_set_part (0, 0, Height - 1, Width - 1)
dev_update_window (‘on’)

處理思路

這個例子是主要講解了使用xld邊緣擬合測量圓的大小與相對位置的例子。

后記

大家有什么問題可以向我提問哈,我看到了第一時間回復,希望在學習的路上多多結交良師益友。

總結

以上是生活随笔為你收集整理的HALCON示例程序measure_metal_part_first_example.hdev通过拟合边缘进行尺寸测量的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。