HALCON示例程序color_fuses.hdev通過顏色對保險絲進行分類
示例程序源碼(加注釋)
- 關于顯示類函數解釋
dev_update_window (‘off’) - 定義字符串變量并初始化
FuseColors := [‘Orange’,‘Red’,‘Blue’,‘Yellow’,‘Green’]
FuseTypes := [5,10,15,20,30] - 在hsv的H分量重Orange閾值為 10-30, Red閾值為 0-10以此類推
HueRanges := [10,30,0,10,125,162,30,64,96,128]
Count := 0
dev_close_window ()
dev_open_window (0, 0, 800, 600, ‘black’, WH)
while (Count <= 4)- 讀入圖片
read_image (Image, ‘color/color_fuses_0’ + Count)
dev_display (Image) - 設置光標位置,并打印字符串,也是顯示類函數
set_tposition (WH, 12, 512)
write_string (WH, ‘color/color_fuses0’ + Count + ‘.png’) - 下邊的兩句話是將三通道彩色圖片轉換為HSV通道。第一步先將彩色圖片分成RGB三通道圖片,之后進行RGB向HSV轉化。
decompose3 (Image, Red, Green, Blue)
trans_from_rgb (Red, Green, Blue, Hue, Saturation, Intensity, ‘hsv’) - 對S空間圖像進行二值化操作
threshold (Saturation, Saturated, 60, 255) - 使用二值化后的區域來縮小H空間內的圖像定義域,通俗點的話是把保險絲摳圖扣出來
reduce_domain (Hue, Saturated, HueSaturated)
for Fuse := 0 to |FuseTypes| - 1 by 1- 通過程序開始時定義的H空間分割閾值進行二值化
threshold (HueSaturated, CurrentFuse, HueRanges[Fuse * 2], HueRanges[Fuse * 2 + 1]) - 分割連通域
connection (CurrentFuse, CurrentFuseConn) - 填充孔洞
fill_up (CurrentFuseConn, CurrentFuseFill) - 通過面積篩選保險絲
select_shape (CurrentFuseFill, CurrentFuseSel, ‘area’, ‘and’, 6000, 20000) - 求取區域的坐標
area_center (CurrentFuseSel, FuseArea, Row1, Column1)
dev_set_color (‘magenta’)
for i := 0 to |FuseArea| - 1 by 1
set_tposition (WH, Row1[i], Column1[i])
write_string (WH, FuseColors[Fuse] + ’ ’ + FuseTypes[Fuse] + ’ Ampere’)
endfor
set_tposition (WH, 24 * (Fuse + 1), 12)
dev_set_color (‘slate blue’)
write_string (WH, FuseColors[Fuse] + ’ Fuses: ’ + |FuseArea|)
endfor
stop ()
Count := Count + 1
endwhile
dev_update_window (‘on’)
- 通過程序開始時定義的H空間分割閾值進行二值化
- 讀入圖片
處理思路
這個例子是將三通道的RGB圖像轉化到HSV空間進行分割的例子,使用 decompose3 、trans_from_rgb 兩個算子實現RGB圖像轉化到HSV空間作用,使用HSV空間內區域特征更加明顯的特點進行分割。
后記
大家有什么問題可以向我提問哈,我看到了第一時間回復,希望在學習的路上多多結交良師益友。