本次Halcon实验仅考虑给定图片的提取,实际项目运用需要考虑通用性及提取失败的处理,仅供学习使用。
提取过程如下,供参考:
1:读取原图
read_image (Bottleletter, 'D:/Camera/bottleletter.png')
rgb1_to_gray (Bottleletter, GrayImage)
2:二值化,找到原图瓶盖的边缘;
threshold (GrayImage, Regions, 79, 240)
3:图形形态学处理:利用圆形腐蚀,减少识别区域:
erosion_circle (Regions, RegionErosion, 70)
4:凸性处理:注意不要使用内接圆,防止出现圆环;
shape_trans (RegionErosion, RegionTrans, 'convex')
5:和原图相减,获取裁剪后的图形:
reduce_domain (GrayImage, RegionTrans, ImageReduced)
6:为了过滤图中“保质期6个”及下面文字“沙拉酱香”的影响,此处在原图中画一个长度等于原图尺寸,高度只有一半的矩形来分割原图,实际项目识别中,需要尽量保持瓶盖为一个方向拍照且图片的视野处于中心水平线位置;
gen_rectangle1 (ROI_1_0, 0.0, 0.0927928, 270.668, 656.907)
reduce_domain (ImageReduced, ROI_1_0, ImageReduced1)
7:再次分割图形后的结果:
8:图形灰度值线性变换处理:增强“曝光度”,白的更白
9:图形增强:增强对比度
10:二值化及分割连通域
threshold (ImageEmphasize, Regions1, 0, 132)
connection (Regions1, ConnectedRegions)
11:根据面积,长、宽等特性选择所需区域:
select_shape (ConnectedRegions, LetterRegions, ['area','height'], 'and', [43.71,22.217], [113.13,50])
12:特性选择后,对区域排序,为日期字符识别做准备,不排序,可能出现:0 7 2 9 20 等杂乱无章的情形;
sort_region (LetterRegions, SortedLetters, 'character', 'true', 'column')
13:字符识别及显示
read_ocr_class_mlp ('Industrial_0-9_NoRej.omc', OCRHandle)
do_ocr_multi_class_mlp (SortedLetters, ImageReduced1, OCRHandle, Class, Confidence)
disp_message (WindowHandle, Class, 'window', 12, 12, 'black', 'true')
完工!!!