halcon 字符识别(带干扰)

请添加图片描述

图片与数据

链接:https://pan.baidu.com/s/1ZliPyW1VdGTBWMiniCkvYg
提取码:sif0

处理流程

1、彩色图片拆分3色图片
2、利用颜色分量图片不同 过滤水平干扰线等
3、链接被干扰的字符区域 并填充数据,获取字符连通域
4、绘制白底黑字的图片
5、字符连通域,白底黑字图片、字符识别

完整代码

* 
* 使用彩色图片 识别数字 ocrcolor.hdev

***** 加载显示图片******************************
read_image (Image, './img_color/color_form_01')
get_image_size (Image, Width, Height)


dev_close_window ()
dev_open_window (0, 0, Width, Height, 'black', WindowID)
dev_display (Image)
dev_set_line_width (3)
dev_set_draw ('margin')
dev_update_window ('off')

***** 加载字符集(0-9******************************
read_ocr_class_mlp ('./Industrial_0-9_NoRej', OCRHandle)

* 循环读取图片
NumImages := 8
for img := 1 to NumImages by 1
    ***** 1、加载图片******************************
    read_image (Image, './img_color/color_form_0' + img)
    * 均值滤波
    mean_image (Image, Mean, 3, 3)
    * 彩色图片通道拆分
    decompose3 (Mean, Red, Green, Blue)
    
    ***** 2、使用绿色图片寻找 数字前景图(二值化图)******************************
    * 二值化 非数字不清楚特点
    threshold (Green, ForegroundRaw, 0, 220)
    * 前景图片中截取区域图片(截取四个边)
    clip_region (ForegroundRaw, Foreground, 3, 3, Height - 4, Width - 4)
    
    ***** 3、获取字符区域二值图******************************
    * 红色文字区域截取
    reduce_domain (Red, Foreground, RedReduced)
    * 绿色文字区域截取
    reduce_domain (Green, Foreground, GreenReduced)
    * 图片相减(红色灰度图-绿色灰度图)*2 + 128 
    sub_image (RedReduced, GreenReduced, ImageSub, 2, 128)
    * 图片均值滤波
    mean_image (ImageSub, ImageMean, 3, 3)
    * 二值化阈值(暗区) 自动获取低阈值连通域(暗区阈值 1-15的二值化图)
    binary_threshold (ImageMean, Cluster1, 'smooth_histo', 'dark', UsedThreshold)
    * 前景图片(字符+暗区) - (暗区)= 字符区域
    difference (Foreground, Cluster1, Cluster2)
    * 组合暗区与字符区域
    concat_obj (Cluster1, Cluster2, Cluster)
    * 同时做开运算
    opening_circle (Cluster, Opening, 2.5)
    * 外接矩形(字符区域,暗区)
    smallest_rectangle1 (Opening, Row1, Column1, Row2, Column2)
    gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)
    
    * 通过宽度判断 字符区域
    WidthCluster := Column2 - Column1 + 1
    if (WidthCluster[0] > WidthCluster[1])
        select_obj (Opening, NumberRegion, 2)
    else
        select_obj (Opening, NumberRegion, 1)
    endif
    
    * 链接字符二值区域 (宽度 1 高度20 的 卷积核)
    closing_rectangle1 (NumberRegion, NumberCand, 1, 20)
    * 获取非字符区域
    difference (Image, NumberCand, NoNumbers)
    
    * 连通域分析
    connection (NumberRegion, NumberParts)
    * 字符区域计算均值与偏差
    intensity (NumberParts, Green, MeanIntensity, Deviation)
    * 灰度膨胀 填充延展区域 使用平均灰度
    expand_gray_ref (NumberParts, Green, NoNumbers, Numbers, 20, 'image', MeanIntensity, 48)
    * 组合数字区域
    union1 (Numbers, NumberRegion)
    * 连通域分析
    connection (NumberRegion, Numbers)
    
    * 填充连通域
    fill_up_shape (Numbers, RegionFillUp, 'area', 1, 100)
    * 开运算
    opening_circle (RegionFillUp, FinalNumbersUnsorted, 3.5)
    * 字符连通域排序
    sort_region (FinalNumbersUnsorted, FinalNumbers, 'character', 'true', 'row')
    dev_set_color ('blue')
    dev_display (Image)
    dev_display (FinalNumbers)
    * 统计数量
    count_obj (FinalNumbers, NumNumbers)
    * 重新组合数字连通域
    union1 (FinalNumbers, NumberRegion)
    * 计算非字符区域
    difference (Image, NumberRegion, NoNumbers)
    
    ** 根据区域绘制 白底黑字的图片
    * 区域绘制图片 非字符区域 填充白色
    paint_region (NoNumbers, Green, ImageOCRRaw, 255, 'fill')
    * 区域绘制图片 字符区域 填充黑色
    paint_region (NumberRegion, ImageOCRRaw, ImageOCR, 0, 'fill')
    
    ***** 4、数字识别******************************
    * FinalNumbers 字符连通域
    * ImageOCR  白底黑字的 数字图片
    do_ocr_multi_class_mlp (FinalNumbers, ImageOCR, OCRHandle, RecChar, Confidence)
    
    ***** 5、显示结果******************************
    set_display_font (WindowID, 27, 'mono', 'true', 'false')
    * 组合字符 sum(字符数组)=字符串
    * 
    disp_message (WindowID, sum(RecChar), 'window', 32, 24, 'blue', 'false')
    
    * 暂停与显示信息
    if (img < NumImages)
        set_display_font (WindowID, 16, 'mono', 'true', 'false')
        disp_continue_message (WindowID, 'black', 'true')
        stop ()
    endif
endfor
dev_update_window ('on')

在这里插入图片描述

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

廷益--飞鸟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值