一、Halcon小函數的封裝和修改
1、名詞解釋:
算子:指Halcon中最基礎、最底層的函數(即你看不到它的代碼實現),一個算子只有一句話,例如threshold算子。
小函數:由多個算子組合成的函數,我習慣稱為小函數。其特點是,可以通過鼠標右鍵單擊“顯示函數”打開。如下圖:
通常,Halcon代碼程序窗口中,算子和小函數的代碼顏色是有差異的。
2、小函數封裝
下面的算法實現的是得到二維碼的面積和中心點坐標
read_image (Image, 'printer_chip/printer_chip_01')
threshold (Image, Region, 128, 255)
fill_up (Region, RegionFillUp)
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等都屬於圖標參數。
控制參數:一般數據、字符串都屬於控制參數。
④ 點擊“確定”:
二、Halcon小函數的導出
我們可以直接導出代碼,看這個小函數是什么玩意兒:
執行“文件——導出”,彈出頁面參數設置如下:
導出的代碼其他地方都不看,我們只關心這個小函數(方法),如果這個小函數的Halcon代碼有變化,重新導出以后,將該方法替換掉C#代碼里的方法就行了。