Halcon字符提取

字符提取的整个过程:提取图像当中每个字符区域→读取系统或者读取自定义分类器→识别字符do_ocr_single_class_mlp读取单个或者使用do_ocr_multi_class_mlp读取多个字符→处理识别结果。

分类器实现的过程?

  1. 创建分类器 create_ocr_class_mlp ()
  2. 训练分类器 train_class_mlp ()
  3. 写入omc文件 write_ocr_class_mlp ()
  4. 读取分类器 read_ocr_class_mlp ()
  5. 识别字符 do_ocr_single_class_mlp ()
  6. 释放分类器 clear_ocr_class_mlp ()

同一种分类器一般又分为两种:拒绝类和非拒绝类,处理分类器对输入的字符识别结果不确定或者置信度过低的情况。

 下面是对图片中的字符提取的例子:

原图
最终效果图

 1.读取图片并设置参数

read_image (Image, '1')
dev_set_draw ('margin')
dev_set_line_width (2)

2. 均值滤波过滤

一般值可以选择 一般提取区域的1.1倍或者2倍
mean_image (Image, ImageMean, 30, 80)

3. 动态阈值分割

当原始图像与参考图像之间灰度值至少是5个时候,才会被归为目标区域
dyn_threshold (Image, ImageMean, RegionDynThresh, 7, 'light')
closing_circle (RegionDynThresh, RegionClosing, 3.5)
connection (RegionClosing, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 300, 700)
运行后的效果

4.对区域进行排序 

sort_region (SelectedRegions, SortedRegions, 'first_point', 'true', 'column')
shape_trans (SortedRegions, RegionTrans, 'rectangle1') // 转成矩形区域
运行后的效果

5. 加载分类器

read_ocr_class_mlp ('SEMI_Rej.omc', OCRHandle)
invert_image (Image, ImageInvert)

6.提取多个字符并最后释放分类器

do_ocr_multi_class_mlp (RegionTrans, ImageInvert, OCRHandle, Class, Confidence)
dev_display (ImageInvert)
dev_display (RegionTrans)
area_center (RegionTrans, Area, Row, Column)
dev_get_window (WindowHandle)
for Index := 0 to |Class|-1 by 1
    disp_message (WindowHandle, Class[Index], 'image', Row[Index]+30, Column[Index]-10, 'black', 'true')
endfor
clear_ocr_class_mlp (OCRHandle)

 最终效果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值