1. 程式人生 > 其它 >30.5、Blob例項

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)

$','ignore_case'], ImageFiles)

for Index := 0 to |ImageFiles| - 1 by 1

read_image (Image, ImageFiles[Index])

*自動閾值

bin_threshold (Image, Region)

*填充區域

fill_up (

Region, RegionFillUp)

*填充前後做差集

difference (RegionFillUp, Region, RegionDifference)

*連通性

connection (RegionDifference, ConnectedRegions)

*根據面積來進行篩選----在特徵直方圖插入該運算元後修改引數

select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 600,

1200)

*計算中心座標

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

 

最終結果: