halcon编程入门二——颜色识别

用HSV的方式进行颜色识别

用HSV的方式进行颜色识别时受光照影响较大。

* Image Acquisition 01: Code generated by Image Acquisition 01
* Image Acquisition 01: Code generated by Image Acquisition 01
*颜色识别
 dev_close_window ()
 dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
 for i:=1 to 2 by 1
     read_image (Image, 'cable'+i)
     decompose3 (Image, Red, Green, Blue)
     *分割图像为R,G,B三个图像
     trans_from_rgb (Red, Green, Blue, Hue, Saturation, Intensity, 'hsv')
     *转换为HSV图像
     threshold (Saturation, Region, 128, 255)
     *将图像明显的S分量图像二值化
     reduce_domain (Hue, Region, ImageReduced)
     *从H通道中获得特定区域Region位置的图像(通过reduce_domain确实能获得特定区域Region位置的图像,但是,reduce_domain是缩小一个图像的定义域,并不缩小图像的实际尺寸,即新图像ImageReduced尺寸大小并未发生变化。)
     threshold (ImageReduced, Yellow, 20, 50)
     *用灰度直方图选取黄色的区域
     connection (Yellow, ConnectedRegions)
     *将选取形成一个连通域
     select_shape_std (ConnectedRegions, SelectedRegions, 'max_area', 70)
     *轮廓直方图选择区域
     closing_circle (SelectedRegions, RegionClosing, 3.5)
     *闭运算
     reduce_domain (ImageReduced, RegionClosing, ImageReduced1)
     *获得指定区域RegionClosing的图像
     dev_display (ImageReduced)
     dev_display (ImageReduced1)
 endfor

颜色识别步骤:

1.采集
2.预处理:
对比度:
scale_image:对图像做比例运算
emphasize:图像分割
gray_range_rect:确定一个矩形的灰度值范围
equ_hist_image:直方图均衡化.
去噪:
中值滤波:
均值滤波:
高斯滤波:
3.图像分割:
blob分析:
二值化:threshold
形状选择:select_shape_std
形态学:
4.特征识别及计算:
5显示或通信:

* Image Acquisition 01: Code generated by Image Acquisition 01
* Image Acquisition 01: Code generated by Image Acquisition 01
*颜色识别案例——识别不同颜色糖豆
while(true)
    read_image (Image, 'printer_chip/printer_chip_01')
    decompose3 (Image, Red, Green, Blue)
    *图像分割
    trans_from_rgb (Red, Green, Blue, Hue, Saturation, Intensity, 'hsv')
    *灰度转换
    threshold (Hue, Region, 128, 255)
    *用灰度直方图提取特定灰度区域
    connection (Region, ConnectedRegions)
    *按特定区域形成连通域
    select_shape_std (ConnectedRegions, SelectedRegions, 'max_area', 70)
    *用特征直方图提取特定区域
    
    
endwhile

用MLP训练学习进行颜色识别

* Image Acquisition 01: Code generated by Image Acquisition 01
* Image Acquisition 01: Code generated by Image Acquisition 01
open_framegrabber ('File', 1, 1, 0, 0, 0, 0, 'default', -1, 'default', -1, 'false', 'printer_chip/printer_chip_01', '', 1, 2, AcqHandle)
grab_image_start (AcqHandle, -1)
grab_image_async (Image, AcqHandle, -1)
get_image_size (Image, Width, Height)
*读取图像
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
Regions:= ['黄','红','绿','橙','背景']
gen_empty_obj(Classes)
for i :=1 to |Regions| by 1
    dev_display (Image)
    dev_display (Classes)
    disp_message (WindowHandle, '请选择指定区域', 'window', 12, 12, 'black', 'true')
    draw_rectangle1 (WindowHandle, Row1, Column1, Row2, Column2)
    gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)
    concat_obj (Rectangle, Classes, ObjectsConcat)
endfor
*手动规划检测样本
create_class_mlp (3, 7, 5, 'softmax', 'normalization', 3, 42, MLPHandle)
add_samples_image_class_mlp (Image, Classes, MLPHandle)
*创建深度学习框架
disp_message (WindowHandle, '开始训练模型', 'window', Row1, Column1, 'black', 'true')
train_class_mlp (MLPHandle, 400, 0.5, 0.01, Error, ErrorLog)
*训练模型
while(true)
    grab_image_async (Image,AcqHandle, -1)
    classify_image_class_mlp (Image, ClassRegions, MLPHandle, 0.5)
    *识别
    count_obj (ObjectsConcat, Number)
    for Index :=1 to 5 by 1
        dev_clear_window ()
        copy_obj (ObjectsConcat, ObjectsSelected, Index, 1)
        dev_display (Image)
        dev_display (ObjectsSelected)
        disp_message (WindowHandle, Regions[Number-Index], 'window', Row1, Column1, 'black', 'true')
        *显示
        stop()
    endfor
endwhile
close_framegrabber (AcqHandle)
  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值