Halcon学习(3)

做了一个极其简陋的动态跟踪
调用笔记本电脑自带摄像头,发现画面中的橙色目标并标记
基本思路:

Created with Raphaël 2.2.0 开始 输入图像 分离RGB ImageSub = R - G 二值化 找到面积最大的region smallest矩形 画矩形、输出文本 结束

没有采用HSV,就用了之前Helcon学习(1)中改进前的方法。
但由于夜间灯光不好,有时不能区分肤色橙色目标,于是对sub_image和threshold的参数进行了比较极端的设置。

* Image Acquisition 01: Code generated by Image Acquisition 01
open_framegrabber ('DirectShow', 1, 1, 0, 0, 0, 0, 'default', 8, 'rgb', -1, 'false', 'default', '[0] Chicony USB2.0 Camera', 0, -1, AcqHandle)
dev_open_window (0, 0, 800, 450, 'black', WindowHandle)
while (true)
    grab_image (Image, AcqHandle)  
    grab_image_async (Image, AcqHandle, -1)
    zoom_image_factor (Image, Image, 0.625,0.625, 'constant')
    dev_display (Image)
    decompose3 (Image, R, G, B)
    *由于夜间灯光不好 经常出现把肤色也选中的bug 于是做了以下暴力魔改
    *3倍的相减!!!
    sub_image (R, G, ImageSub, 3, 0)
    *150的阈值!!!
    threshold (ImageSub, Regions, 150, 255)
    *当画面中没有出现目标(橙色)时 有可能会将肤色当作目标
    *但一旦目标出现 不会再出现误判
    connection (Regions, ConnectedRegions)
    select_shape_std (ConnectedRegions, SelectedRegions, 'max_area', 70)
    *矩形框
    smallest_rectangle1 (SelectedRegions, Row1, Column1, Row2, Column2)
    rCenter := [(Row1 + Row2)/2,(Column1 + Column2)/2]
    rWidth := (Column2 - Column1)/2
    rHeight := (Row2 - Row1)/2
    gen_rectangle2_contour_xld (Rectangle, rCenter[0], rCenter[1],0, rWidth, rHeight)
    dev_display (Rectangle)
    *写字
    set_tposition (WindowHandle, Row1 - 30, Column1)
    write_string (WindowHandle, '中心坐标:')
    set_tposition (WindowHandle, Row1 - 15, Column1)
    Coordinate := 'R=' + rCenter[0] + ' C=' + rCenter[1]
    write_string (WindowHandle, Coordinate)
endwhile
close_framegrabber (AcqHandle)

画面中没有橙色目标的时候,会选中背景中的饮料瓶或者人脸/胳膊
在这里插入图片描述
画面中有目标的时候,会正常显示目标
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值