使用hue通道的像素值确定颜色,受光照影响很大。
颜色 | Orange | Red | Blue | Yellow | Green |
开始 | 10 | 0 | 125 | 30 | 96 |
结束 | 30 | 10 | 162 | 64 | 128 |
使用HUE通道进行颜色识别的步骤:
1. 三通道RGB分离decompose3
2. 色域转换RGB->hsv trans_from_rgb
3. 在Saturation通道上进行二值化(Saturation通道容易区分)
4. 在hue通道上进行掩码 reduce_domain
5. 将掩码后hue通道上的图像进行二值化,二值化的取值使用特点颜色hue的值,筛选出特定颜色
6. 填充和分割图像并进行形状选择。
7. area_center获取物体的中心坐标。
dev_close_window ()
dev_open_window (0, 0, 800, 600, 'black', WH)
read_image (Image, 'D:/hmeng/code/halcon/yanse.jpg')
* 只识别以下颜色
FuseColors := ['Orange','Red','Blue','Yellow','Green']
FuseTypes := [5,10,15,20,30]
* HueRanges: Orange 10-30, Red 0-10...
HueRanges := [10,30,0,10,125,162,30,64,96,128]
* 分割成RGB三通道
decompose3 (Image, Red, Green, Blue)
* 转换成HSV通道
trans_from_rgb (Red, Green, Blue, Hue, Saturation, Intensity, 'hsv')
* 在S通道进行二值化
threshold (Saturation, Regions, 83, 255)
* 在H通道进行掩码
reduce_domain (Hue, Regions, ImageReduced)
* 依次检查是否有五种颜色
for Fuse := 1 to |FuseTypes|-1 by 1
* 通过HUE像素值筛选特定颜色
threshold (ImageReduced, CurrentFuse, HueRanges[Fuse * 2], HueRanges[Fuse * 2 + 1])
connection (CurrentFuse, ConnectedRegions)
fill_up (ConnectedRegions, RegionFillUp)
select_shape (RegionFillUp, SelectedRegions, 'area', 'and', 665.14, 5000)
* 计算最终颜色位置
area_center (SelectedRegions, 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
endfor
来源:oschina
链接:https://my.oschina.net/u/4228078/blog/3195395