30.5、Blob例項
例子1:算出下圖套環個數
程式碼:
dev_update_window ('off')
* Code generated by Image Acquisition 01
list_files ('F:/套環檢測', ['files','follow_links'], ImageFiles)
tuple_regexp_select (ImageFiles,
['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima)
for Index := 0 to |ImageFiles| - 1 by 1
read_image (Image, ImageFiles[Index])
*自動閾值
bin_threshold (Image, Region)
*填充區域
fill_up (
*填充前後做差集
difference (RegionFillUp, Region, RegionDifference)
*連通性
connection (RegionDifference, ConnectedRegions)
*根據面積來進行篩選----在特徵直方圖插入該運算元後修改引數
select_shape (ConnectedRegions, SelectedRegions,
'area',
'and',
600,
*計算中心座標
area_center (SelectedRegions, Area, Row, Column)
*在中心位置顯示"十字"
gen_cross_contour_xld (Cross, Row, Column, 15, 0)
* Number:=|Area|
dev_display (Image)
dev_display (Cross)
count_obj (SelectedRegions, Number)
disp_message (3600, '個數為:'+ Number, 'image', 98, 52, 'red', 'false')
endfor
例子2:檢測針槽中是否有針
程式碼:
dev_update_window ('off')
read_image (Image1386749f5a8754c8f4e7, 'F:/Halcon學習/2、鳥叔學習視訊/鳥叔halcon初級培訓/鳥叔halcon初級培訓 blob分析工具/鳥叔halcon初級培訓 blob分析工具圖片及示例程式/針槽有無針檢測/13_867_49f5a8754c8f4e7.png')
decompose4 (Image1386749f5a8754c8f4e7, Image1, Image2, Image3, Image4)
*閾值分割
threshold (Image1, Regions, 0, 181)
*填補空洞
fill_up (Regions, RegionFillUp)
*閉運算操作,填補溝壑
closing_rectangle1 (RegionFillUp, RegionClosing, 10, 4)
*連通性
connection (RegionClosing, ConnectedRegions)
*按面積篩選
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 213.61, 1711.02)
*腐蝕,消除邊界影響
erosion_rectangle1 (SelectedRegions, RegionErosion, 4,4)
*計算中心座標,便於下面輸出字型
area_center (RegionErosion, Area, Row, Column)
count_obj (RegionErosion, Number)
dev_display (Image1)
for Index := 1 to Number by 1
*選中第一個針槽
select_obj (RegionErosion, ObjectSelected, Index)
*剪裁針槽
reduce_domain (Image1, ObjectSelected, ImageReduced)
*對一個針槽進行閾值分割
threshold (ImageReduced, Regions1, 68, 255)
*連通性
connection (Regions1, ConnectedRegions1)
*按寬度篩選,把寬度過小的認為是噪音,把寬度為6-50的認為是針
select_shape (ConnectedRegions1, SelectedRegions1, 'width', 'and', 6, 50)
*計算是否有針
count_obj (SelectedRegions1, Number1)
if(Number1>=1)
*這裡第三個引數要選擇為 'image'
disp_message (3600, '有針', 'image', Row[Index-1]-10, Column[Index-1]-10, 'blue', 'false')
else
disp_message (3600, '無針', 'image', Row[Index-1], Column[Index-1], 'red', 'false')
endif
endfor
最終結果: