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

本文介绍使用HSV颜色空间进行图像颜色识别的方法,包括图像预处理、分割、特征识别等步骤,同时探讨了MLP(多层感知器)在颜色识别任务中的应用,通过训练模型实现对不同颜色糖豆的有效识别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值