打开halcon,按下ctrl+e打开halcon自带例程。应用范围->颜色检测->color_fuses.hdev
颜色检测是通过把图像转化为hsv图像,然后对Hue图像值范围进行检测的,Hue值范围可通过显示Hue图像,按住ctrl键,鼠标移动到图像上查看某一颜色的Hue值范围。
* color_fuses.hdev: classify fuses by color
dev_update_window ('off')
* ****
* step: set up fuse properties and hue ranges
* ****
*颜色字符串定义,纯粹是为后面显示颜色准备的
FuseColors := ['Orange','Red','Blue','Yellow','Green']
*类型字符串定义,对这个保险丝承受的安培值的一个定义
FuseTypes := [5,10,15,20,30]
* HueRanges: Orange 10-30, Red 0-10...
*Hue颜色范围定义,即以上定义的橙色对应的Hue值范围为10-30,红色Hue值范围为0-10,依次类推
*这个值通过双击变量窗口上Hue图像,按住ctrl键,鼠标移动到相应的颜色位置查看其值
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)
*总共有4幅图像
while (Count <= 4)
* ****
* step: acquire image
* ****
*读图,把图像名称显示在正上方
read_image (Image, 'color/color_fuses_0' + Count)
dev_display (Image)
set_tposition (WH, 12, 512)
write_string (WH, 'color/color_fuses0' + Count + '.png')
* ****
* step: extract saturated hues
* ****
*分离图像,把Rgb图分离
decompose3 (Image, Red, Green, Blue)
*转换为HSV图像
trans_from_rgb (Red, Green, Blue, Hue, Saturation, Intensity, 'hsv')
*抠图,只处理感兴趣区域,这里是处理有物品的区域,把背景去掉
threshold (Saturation, Saturated, 60, 255)
reduce_domain (Hue, Saturated, HueSaturated)
for Fuse := 0 to |FuseTypes| - 1 by 1
* ****
* step: classify specific fuse
* ****
*对Hue图像检测,检测值在某一颜色范围内的区域。例如橙色是Hue值在10-30范围内的区域
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')
原始图像:
ji
检测结果