Halcon例程分析2:颜色检测识别

打开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

检测结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

究极调参工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值