颜色识别-hue

ⅰ亾dé卋堺 提交于 2020-03-15 19:08:08

使用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

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!