步骤框图:
1、segmentation:用threshold等方法将所要的区域筛选出来。
Closing_retangle1这个算子可以将区域按行分割成子区域(此时输出区域的元素个数为1,是一个整体)。
然后经过connection算子运算可以将被处理过的区域按行分割成若干个子区域
Intersection:By using intersection with the original segmentationand the selected line as input, the characters for training are returned
2、打开一个training file (.trf)文件,然后将区域用append_ocr_trainf算子将分割好的区域写入到文件
样本图片:
案例代码(生成training file .trf的代码):
第一步:
*选取的行数为第三行
TrainingLine := 3
*通过灰度值选出字符所在的区域
threshold (Image, Region, 0, 125)
*将字符所在的区域按行划分后输出到RegionClosing区域(但是此时RegionClosing区域的元素个数为1,是一个整体)
closing_rectangle1 (Region, RegionClosing, 70, 10)
*将区域RegionClosing拆解成有联系的独立的单元并输出到区域Lines。(Lines的元素个数为5,即一行为一个区域)
connection (RegionClosing, Lines)
*选择区域Lines中的第三个元素,即第三行,输出到区域Training
select_obj (Lines, Training, TrainingLine)
*将用于训练的字符输出到区域TrainingChars
intersection (Training, Region, TrainingChars)
*将区域TrainingChars区域拆分开来并输出到ConnectedRegions(元素个数为10,即第三行的字符个数)
connection (TrainingChars, ConnectedRegions)
*将区域ConnectedRegion中的元素从左往右排并输出到区域SortedRegions
sort_region (ConnectedRegions, SortedRegions,'first_point', 'true', 'column')
第二步:
*图片中字符的名字
Chars := ['0','1','2','3','4','5','6','7','8','9']
TrainFile := 'numbers.trf'
dev_set_check ('~give_error')
delete_file (TrainFile)
dev_set_check ('give_error')
*将字符一个个取出,并将信息写入到training file
for i := 1 to 10 by 1
select_obj (SortedRegions, TrainSingle, i)
*灰度值和字符区域和名字被写入到了training file
append_ocr_trainf (TrainSingle, Image, Chars[i -1], TrainFile)
endfor