基于颜色空间的颜色检测(根据HSV空间中的色度图像来识别不同颜色,因为不同颜色有不同的色度范围)
一、halcon例程1:应用范围—>颜色识别—>segment color image in HSV color space。
dev_close_window ()
dev_open_window (0, 0, 640, 480, 'black', WindowHandle)
for i := 1 to 2 by 1
read_image (Image, 'cable' + i)
decompose3 (Image, Red, Green, Blue)
trans_from_rgb (Red, Green, Blue, Hue, Saturation, Intensity, 'hsv')
*对饱和度图像进行二值化
threshold (Saturation, HighSaturation, 100, 255)
*在色调图像中抠图
reduce_domain (Hue, HighSaturation, HueHighSaturation)
threshold (HueHighSaturation, Yellow, 20, 50)
connection (Yellow, ConnectedRegions)
*根据形状选择,‘max_area’为选择面积最大的连通域
select_shape_std (ConnectedRegions, SelectedRegions, 'max_area', 70)
closing_circle (SelectedRegions, Yellow, 3.5)
reduce_domain (Image, Yellow, ImageReduced)
dev_display (HueHighSaturation)
dev_display (ImageReduced)
stop ()
endfor
运行结果如下:
二、halcon例程2:应用范围—>颜色识别—>sort fuses bu color。
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
*五种不同颜色的熔断丝
color:=['Orange','Red','Blue','Yellow','Green']
*各颜色对应的色度范围,可在Hue图像的灰度直方图中二值化查看其范围,也可在Hue图像中ctrl加鼠标查看大致范围, 还可在画图的编辑颜色中查看。
HueRange:=[10,30,0,10,125,162,30,64,96,128]
for i:=0 to 4 by 1
read_image (Image, 'color_fuses_0'+i)
dev_display (Image)
set_tposition (WindowHandle, 24, 512)
write_string (WindowHandle, 'color_fuses_0'+i+'.png')
*从色度图像中抠图
decompose3 (Image, Red, Green, Blue)
trans_from_rgb (Red, Green, Blue, Hue, Saturation, Value, 'hsv')
threshold (Saturation, Regions, 60, 255)
reduce_domain (Hue, Regions, ImageReduced)
for j:=0 to 4 by 1
threshold (ImageReduced, Region, HueRange[2*j], HueRange[2*j+1])
connection (Region, ConnectedRegions)
fill_up (ConnectedRegions, RegionFillUp)
select_shape (RegionFillUp, SelectedRegions, 'area', 'and', 2800, 20000)
area_center (SelectedRegions, Area, Row, Column)
for k:=0 to |Area|-1 by 1
set_tposition (WindowHandle, Row[k], Column[k])
write_string (WindowHandle, color[j])
endfor
disp_message (WindowHandle, color[j]+':'+|Area|, 'window', 20*j, -1, 'blue', 'false')
endfor
disp_continue_message (WindowHandle, 'black', 'true')
stop()
endfor
识别结果如下: