1、Halcon小函數的封裝和修改算法
1、名詞解釋:函數
算子:指Halcon中最基礎、最底層的函數(即你看不到它的代碼實現),一個算子只有一句話,例如threshold算子。spa
小函數:由多個算子組合成的函數,我習慣稱爲小函數。其特色是,能夠經過鼠標右鍵單擊「顯示函數」打開。以下圖:3d
一般,Halcon代碼程序窗口中,算子和小函數的代碼顏色是有差別的。blog
2、小函數封裝ip
下面的算法實現的是獲得二維碼的面積和中心點座標字符串
read_image (Image, 'printer_chip/printer_chip_01')io
threshold (Image, Region, 128, 255)基礎
fill_up (Region, RegionFillUp)select
connection (RegionFillUp, ConnectedRegions)
*找面積最大的一個,即二維碼區
dev_display (Image)
select_shape_std (ConnectedRegions, SelectedRegions, 'max_area', 70)
*獲得面積和中心點座標
area_center (SelectedRegions, Area, Row, Column)
圖像一般是外部傳入的,不適合囊括在小函數內,所以read_image這句不該該囊括在小函數中。
後面的代碼傳入參數只有一個Image,獲得的參數有不少,例如SelectedRegions、Area、Row、Column等。若是咱們以Image爲入參,以Area爲出參,封裝過程以下:
① 選中須要封裝的所有代碼,右鍵點擊「建立新函數」:
② 在彈出的窗口中填寫函數名,如Get_CodeArea:
③ 而後點擊上圖中「參數」,刪減參數,把不用的參數刪掉便可:
④ 點擊「肯定」生成小函數:
3、小函數修改
因爲目的不一樣,有時候小函數須要增減傳入參數,或者增減傳出參數。即小函數須要修改。步驟以下:
① 點擊下圖圖標:
② 選擇函數「Get_CodeArea」,而後能夠修改函數名,或者參數:
③ 假如咱們不須要二維碼面積,而須要它的中心點座標,所以可把函數名改爲「Get_Point」,而後改參數以下(先把Area刪掉,而後在「控制參數」的輸出裏添加Row和Column):
圖標參數:通常Region、Image、XLD等都屬於圖標參數。
控制參數:通常數據、字符串都屬於控制參數。
④ 點擊「肯定」:
2、Halcon小函數的導出
咱們能夠直接導出代碼,看這個小函數是什麼玩意兒:
執行「文件——導出」,彈出頁面參數設置以下:
導出的代碼其餘地方都不看,咱們只關心這個小函數(方法),若是這個小函數的Halcon代碼有變化,從新導出之後,將該方法替換掉C#代碼裏的方法就好了。