一個ball例程帶你進入 Halcon 世界


* 此例程來自halcon自帶例程,請打開 halcon-》ctrl+E 打開例程-》搜索框中輸入ball added by xiejl
* ball.hdev: Inspection of Ball Bonding * dev_update_window ('off') dev_close_window () dev_open_window (0, 0, 728, 512, 'black', WindowID) read_image (Bond, 'die/die_03') dev_display (Bond) set_display_font (WindowID, 14, 'mono', 'true', 'false') disp_continue_message (WindowID, 'black', 'true') stop () threshold (Bond, Bright, 100, 255) shape_trans (Bright, Die, 'rectangle2') dev_set_color ('green') dev_set_line_width (3) dev_set_draw ('margin') dev_display (Die) disp_continue_message (WindowID, 'black', 'true') stop () reduce_domain (Bond, Die, DieGrey) threshold (DieGrey, Wires, 0, 50) fill_up_shape (Wires, WiresFilled, 'area', 1, 100) dev_display (Bond) dev_set_draw ('fill') dev_set_color ('red') dev_display (WiresFilled) disp_continue_message (WindowID, 'black', 'true') stop () opening_circle (WiresFilled, Balls, 15.5) dev_set_color ('green') dev_display (Balls) disp_continue_message (WindowID, 'black', 'true') stop () connection (Balls, SingleBalls) select_shape (SingleBalls, IntermediateBalls, 'circularity', 'and', 0.85, 1.0) sort_region (IntermediateBalls, FinalBalls, 'first_point', 'true', 'column') dev_display (Bond) dev_set_colored (12) dev_display (FinalBalls) disp_continue_message (WindowID, 'black', 'true') stop () smallest_circle (FinalBalls, Row, Column, Radius) NumBalls := |Radius| Diameter := 2*Radius meanDiameter := sum(Diameter)/NumBalls mimDiameter := min(Diameter) dev_display (Bond) disp_circle (WindowID, Row, Column, Radius) dev_set_color ('white') for i := 1 to NumBalls by 1 if (fmod(i,2)=1) disp_message (WindowID, 'D: '+Diameter[i-1], 'image', Row[i-1]-2.7*Radius[i-1], max([Column[i-1]-60,0]), 'white', 'false') else disp_message (WindowID, 'D: '+Diameter[i-1], 'image', Row[i-1]+1.2*Radius[i-1], max([Column[i-1]-60,0]), 'white', 'false') endif endfor * dump_window (WindowID, 'tiff_rgb', './ball') dev_set_color ('green') dev_update_window ('on') disp_continue_message (WindowID, 'black', 'true') stop () dev_close_window ()

 

  可以看到 圖像的處理就是紅色之外的代碼,沒有幾句。

  先來看看紅色部分的代碼:

  dev_update_window:幫助文檔上是這么說的---此算子決定 所有由其他某一個算子返回的所有圖形對象是否顯示在活動的圖形窗口之上(‘on'為默認參數,代表打開此更新,'off'表示關閉此更新,所有更新由我們手動打開)。參數的選擇對於我們輸出對象在某一單步執行時是沒有影響的,執行之后,圖形輸出對象依然可以顯示在活動的圖形窗口之上。參數選擇應該被置為'off',只有在我們選擇的圖形對象應該被顯示在圖形窗口之上時,我們應該手動調用算子:dev_display算子顯示此對象(包括 image, xld, region等其他圖形對象)。理解了嗎?呵呵

  dev_close_window:這是halcon中比較簡單的內部函數,就是將圖形顯示窗口關閉。當然我們可以通過HDevelop的菜單欄-》窗口-》打開圖形窗口,打開多個圖形窗口。

  dev_open_window:這沒什么好說的,就是將上面關閉的圖形窗口重新打開。

  dev_display:如果我們通過調用dev_update_window(’off')語句,關閉窗口的更新,我們必須手動調用dev_display()內部操作來顯示對象(比如imag,region,xld等其他圖形對象)。

  stop: 這是應該是halcon中最簡單的語句了,相當於C中的system("pause"),讓程序暫停執行,此時我們可以通過觀察變量窗口(顯示圖形變量及控制變量),調試程序等。

  dev_set_color: 在講這句的意義之前,我們可以通過HDevelop的菜單欄-》可視化-》顏色  來達到與此句相同的效果,這可能會幫助你理解dev_set_color的意義,其實就是設置圖形顯示窗口中圖形(image,region,xld等)的圖像顯示顏色。此內部操作和下面講到的dev_set_colored相輔相成。調試非常有用。

  dev_set_colored:和上面一樣,我們可以通過HDevelop的菜單欄-》可視化-》彩色數量  來達到與此句相同的效果。在我們調試程序時,通過connection算子處理后,求取region的連通域,將region分成各不同的region塊,即可以通過此功能完成對各region着不同的顏色,方便我們調試、觀察。

  dev_set_line_width:和上面一樣,可以通過HDevelop的菜單欄-》可視化-》線寬來設置線條的寬度,調試用,比如觀察xld時。

  dev_continue_message:在圖形窗口上顯示繼續信息

 

 

  Halcon的內部操作暫時講這么多。至於算子和外部函數稍的再講 by xiejl

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM