Halcon提取好丽友派

基于上节课老师教的提取汉字,我在课下自己拍照片然后做了一个提取好丽友派的小练习。附图如下:
好丽友
参考代码和部分解释如下:

dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
read_image (Image, '好丽友.jpg')
rgb1_to_gray (Image, GrayImage)
threshold (GrayImage, Regions, 230, 255)
connection (Regions, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 10000, 99999999)
sort_region (SelectedRegions, SortedRegions1, 'first_point', 'true', 'row')
count_obj (SortedRegions1, Number)
*要把断开的字形成一个整体的连通域union将所有连通域联合,union2将指定两个连通域联合
*在多个连通域中选择单个连通域,可在该图像上右击显示目录查看是第几个连通域,
*并将它们进行联合,或者先对这些连通域进行个排序,sort_region
*好
select_obj (SortedRegions1, RegionUnion1, 3)
*丽
select_obj (SortedRegions1, objectselect1, 5)
select_obj (SortedRegions1, objectselect2, 9)
select_obj (SortedRegions1, objectselect3, 8)
union2 (objectselect1, objectselect2, Union1)
union2 (Union1, objectselect3, RegionUnion2)
*友
select_obj (SortedRegions1, RegionUnion3, 1)
*派
select_obj (SortedRegions1, objectselect4, 2)
select_obj (SortedRegions1, objectselect5, 7)
select_obj (SortedRegions1, objectselect6, 11)
select_obj (SortedRegions1, objectselect7, 4)
select_obj (SortedRegions1, objectselect8, 6)
union2 (objectselect4, objectselect5, Union2)
union2 (objectselect6, Union2, Union3)
union2 (Union3, objectselect7, Union4)
union2 (Union4, objectselect8, RegionUnion4)
*创建一个空的对象元组
gen_empty_obj (EmptyObject)
*将其它连通域添加到该对象元组中
concat_obj (EmptyObject, RegionUnion1, EmptyObject)
concat_obj (EmptyObject, RegionUnion2, EmptyObject)
concat_obj (EmptyObject, RegionUnion3, EmptyObject)
concat_obj (EmptyObject, RegionUnion4, EmptyObject)
*1】创建trf训练文件,即将字符图像和字符关联起来
*如果这些字符图像在一幅图像中,一个一个添加用append_ocr_trainf,
*可以直接用write_ocr_trainf把所有字符图像全部写进去
trainfile:='word.trf'
words:=['好','丽','友','派']
write_ocr_trainf (EmptyObject, GrayImage, words, trainfile)
*2】读取训练文件
read_ocr_trainf_names (trainfile, CharacterNames, CharacterCount)
*3】创建模型,注意第五个参数为识别结果的所有类别
create_ocr_class_mlp (10, 10, 'constant', 'default', CharacterNames, 80, 'none', 10, 42, OCRHandle)
*4】训练模型
trainf_ocr_class_mlp (OCRHandle, trainfile, 200, 1, 0.01, Error, ErrorLog)
 
*5】保存训练好的模型,omc文件
write_ocr_class_mlp (OCRHandle, 'words.omc')
 
*清除句柄
clear_ocr_class_mlp (OCRHandle)
 
*6】读取训练好的模型
read_ocr_class_mlp ('words.omc', OCRHandle1)
 
*7】识别
do_ocr_multi_class_mlp (EmptyObject, GrayImage, OCRHandle1, Class, Confidence)
dev_display (Image)
area_center (EmptyObject, Area1, Row1, Column1)
 
*设置显示字体的大小
set_display_font (WindowHandle, 26, 'mono', 'true', 'false')
for i:=0 to 3 by 1
    disp_message (WindowHandle, Class[i], 'image', Row1[i]-550, Column1[i]-150, 'blue', 'false')
endfor

运行结果如下:
在这里插入图片描述

老师的图片比较经典,由于拍照的角度有些倾斜,所以老师还进行了图像的预处理(定位校正)

在这里插入图片描述

dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
read_image (Image, '汉字识别图1.jpg')
rgb1_to_gray (Image, GrayImage)
*线性灰度变换
scale_image (GrayImage, ImageScaled, 1.34921, -89)
*定位校正
threshold (ImageScaled, Regions, 152, 226)
connection (Regions, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, ['area','row'], 'and', [0,243.86], [22589.8,599.24])
union1 (SelectedRegions, RegionUnion)
shape_trans (RegionUnion, RegionTrans, 'rectangle2')
orientation_region (RegionTrans, Phi)
area_center (RegionTrans, Area, Row, Column)
vector_angle_to_rigid (Row, Column, Phi, Row, Column, rad(0), HomMat2D)
affine_trans_image (GrayImage, ImageAffinTrans, HomMat2D, 'constant', 'false')
affine_trans_region (RegionTrans, RegionAffineTrans, HomMat2D, 'nearest_neighbor')
reduce_domain (ImageAffinTrans, RegionAffineTrans, ImageReduced)
rgb1_to_gray (ImageReduced, GrayImage1)
threshold (GrayImage1, Regions1, 194, 230)
closing_rectangle1 (Regions1, RegionClosing, 6, 6)
connection (RegionClosing, ConnectedRegions1)
sort_region (ConnectedRegions1, SortedRegions, 'first_point', 'true', 'row')
count_obj (SortedRegions, Number)
 
*要把断开的字形成一个整体的连通域union将所有连通域联合,union2将指定两个连通域联合
*在多个连通域中选择单个连通域,可在该图像上右击显示目录查看是第几个连通域,
*并将它们进行联合,或者先对这些连通域进行个排序,sort_region
*数
select_obj (SortedRegions, RegionUnion1, 2)
*字
select_obj (ConnectedRegions1, ObjectSelected1, 1)
select_obj (ConnectedRegions1, ObjectSelected2, 9)
union2 (ObjectSelected1, ObjectSelected2, RegionUnion2)
*图
select_obj (ConnectedRegions1, RegionUnion3, 7)
*像
select_obj (ConnectedRegions1, RegionUnion4, 4)
*处
select_obj (ConnectedRegions1, ObjectSelected5, 6)
select_obj (ConnectedRegions1, ObjectSelected6, 5)
union2 (ObjectSelected5, ObjectSelected6, RegionUnion5)
*理
select_obj (ConnectedRegions1, ObjectSelected7, 8)
select_obj (ConnectedRegions1, ObjectSelected8, 3)
union2 (ObjectSelected7, ObjectSelected8, RegionUnion6)
*与
select_obj (ConnectedRegions1, ObjectSelected8, 13)
select_obj (ConnectedRegions1, ObjectSelected9, 19)
union2 (ObjectSelected8, ObjectSelected9, RegionUnion7)
*机
select_obj (ConnectedRegions1, RegionUnion8, 15)
*器
select_obj (ConnectedRegions1, RegionUnion9, 16)
*视
select_obj (ConnectedRegions1, RegionUnion10, 14)
*觉
select_obj (ConnectedRegions1, ObjectSelected10, 12)
select_obj (ConnectedRegions1, ObjectSelected11, 17)
select_obj (ConnectedRegions1, ObjectSelected12, 18)
union2 (ObjectSelected10, ObjectSelected11, RegionUnion11)
union2 (RegionUnion11, ObjectSelected12, RegionUnion11)
 
*创建一个空的对象元组
gen_empty_obj (EmptyObject)
*将其它连通域添加到该对象元组中
concat_obj (EmptyObject, RegionUnion1, EmptyObject)
concat_obj (EmptyObject, RegionUnion2, EmptyObject)
concat_obj (EmptyObject, RegionUnion3, EmptyObject)
concat_obj (EmptyObject, RegionUnion4, EmptyObject)
concat_obj (EmptyObject, RegionUnion5, EmptyObject)
concat_obj (EmptyObject, RegionUnion6, EmptyObject)
concat_obj (EmptyObject, RegionUnion7, EmptyObject)
concat_obj (EmptyObject, RegionUnion8, EmptyObject)
concat_obj (EmptyObject, RegionUnion9, EmptyObject)
concat_obj (EmptyObject, RegionUnion10, EmptyObject)
concat_obj (EmptyObject, RegionUnion11, EmptyObject)
 
*1】创建trf训练文件,即将字符图像和字符关联起来
*如果这些字符图像在一幅图像中,一个一个添加用append_ocr_trainf,
*可以直接用write_ocr_trainf把所有字符图像全部写进去
trainfile := 'words.trf'
words:=['数','字','图','像','处','理','与','机','器','视','觉']
write_ocr_trainf (EmptyObject, ImageAffinTrans, words, trainfile)
 
*2】读取训练文件
read_ocr_trainf_names (trainfile, CharacterNames, CharacterCount)
*3】创建模型,注意第五个参数为识别结果的所有类别
create_ocr_class_mlp (10, 10, 'constant', 'default', CharacterNames, 80, 'none', 10, 42, OCRHandle)
*4】训练模型
trainf_ocr_class_mlp (OCRHandle, trainfile, 200, 1, 0.01, Error, ErrorLog)
 
*5】保存训练好的模型,omc文件
write_ocr_class_mlp (OCRHandle, 'words.omc')
 
*清除句柄
clear_ocr_class_mlp (OCRHandle)
 
*6】读取训练好的模型
read_ocr_class_mlp ('words.omc', OCRHandle1)
 
*7】识别
do_ocr_multi_class_mlp (EmptyObject, ImageAffinTrans, OCRHandle1, Class, Confidence)
dev_display (Image)
area_center (EmptyObject, Area1, Row1, Column1)
 
*设置显示字体的大小
set_display_font (WindowHandle, 26, 'mono', 'true', 'false')
for i:=0 to 10 by 1
    disp_message (WindowHandle, Class[i], 'image', Row1[i]-140, Column1[i]-40, 'white', 'false')
endfor

运行结果如下:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值