
上圖中有一個硬幣和一把鑰匙,要求:計算出硬幣的面積和中心坐標
第一步用灰度直方圖選出硬幣的區域:threshold (GrayImage, Regions, 110, 250)

第二步用開運算去掉圖像上半部分的雜質:opening_circle (Regions, RegionOpening, 10)

開運算是把雜質去掉了,但是在硬幣上腐蝕出了一個小洞,沒關系,我們用填充算子把洞補上:fill_up (RegionOpening, RegionFillUp)

把鑰匙和硬幣連通域斷開:connection (RegionFillUp, ConnectedRegions)

用特征直方圖的圓度特征,把鑰匙和硬幣區別開來:select_shape (ConnectedRegions, SelectedRegions, 'circularity', 'and', 0.60367, 2)

最終只留下了硬幣的區域,此時就可以計算面積和中心坐標:area_center (SelectedRegions, Area, Row, Column)
最后一步顯示信息:disp_message (WindowHandle, '面積:'+Area+'中心坐標:'+Row+' '+Column, 'window', 100, 20, 'black', 'true')

完整的Halcon程序如下
dev_close_window ()//關閉窗體 dev_open_window (0, 0, 512, 512, 'black', WindowHandle)//打開窗體 read_image (Ab, 'C:/Users/LiZhiqiang/Desktop/硬幣.png')//讀取圖像 rgb1_to_gray (Ab, GrayImage)//轉化為灰度圖像 threshold (GrayImage, Regions, 110, 250)//設置灰度范圍 opening_circle (Regions, RegionOpening, 10)//開運算處理,結構元素為圓形,半徑越大去掉的區域就越多(開運算形態學里先腐蝕后膨脹) fill_up (RegionOpening, RegionFillUp)//填充硬幣中殘缺部分 connection (RegionFillUp, ConnectedRegions)//斷開區域,分成多個連通域 *select_shape (ConnectedRegions, SelectedRegions1, 'area', 'and', 16559.6, 30779.8)//特征選擇(面積) select_shape (ConnectedRegions, SelectedRegions, 'circularity', 'and', 0.60367, 2)//特征選擇(圓度) area_center (SelectedRegions, Area, Row, Column)//計算出面積,中心坐標 disp_message (WindowHandle, '面積:'+Area+'中心坐標:'+Row+' '+Column, 'window', 100, 20, 'black', 'true')//顯示信息
