29.2、形態學---綜合例項2
目標要求:通過形態學相關操作,求出右邊4個IC引腳的個數。
程式:
*讀入影象,並把它轉換為灰度圖
read_image (Image000513532, 'F:/Halcon學習/7、測試圖片/000513532.jpg')
rgb1_to_gray (Image000513532, GrayImage)
*設定ROI減少影象處理篇幅
gen_rectangle1 (ROI_0,
36.4579,
780.639,
565.239,
1020.27)
reduce_domain (GrayImage, ROI_0, ImageReduced)
*閾值分割
threshold (ImageReduced, Regions, 0, 83)
*連通性分析,並進行填補空洞
connection (Regions, ConnectedRegions)
fill_up (ConnectedRegions, RegionFillUp)
*開運算
opening_circle (RegionFillUp, RegionOpening, 3)
*連通性,面積篩選
connection (RegionOpening, ConnectedRegions1)
select_shape (ConnectedRegions1, SelectedRegions,
'area',
'and',
4159.99,
6167)
*最小外接矩形,並創建出來
smallest_rectangle1 (SelectedRegions, Row1, Column1, Row2, Column2)
gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)
*排序並計算中心點,便於下面列印字型到影象上
sort_region (Rectangle, Rectangle, 'first_point', 'true', 'column')
area_center (Rectangle, Area, Row, Column)
*膨脹,膨脹後結果與沒膨脹前做差集,獲取得引腳部分割槽域
dilation_rectangle1 (Rectangle, RegionDilation, 16, 1)
difference (RegionDilation, Rectangle, RegionDifference)
*把引腳從影象中分割出來
add_channels (RegionDifference, GrayImage, GrayRegions)
*計算有多少個ic
count_obj (GrayRegions, Number)
dev_clear_window ()
dev_display (Image000513532)
dev_update_window ('off')
*迴圈遍歷每個ic引腳部分割槽域
for Index := 1 to Number by 1
*獲得引腳部分影象,並閾值分割
select_obj (GrayRegions, ObjectSelected, Index)
threshold (ObjectSelected, Regions1, 112, 255)
*開運算把引腳粘連部分分開,-----選取矩形寬度高度分別為5,1因為寬度方向要去除更多,才能分開粘連部分
opening_rectangle1 (Regions1, RegionOpening1, 5, 1)
*連通性分析
connection (RegionOpening1, ConnectedRegions2)
dev_display (ConnectedRegions2)
*計算引腳個數
count_obj (ConnectedRegions2, Number1)
*列印個數到影象上
disp_message (3600, Number1, 'image', Row[Index-1]-10, Column[Index-1]-10, 'yellow', 'false')
endfor
最終效果: