halcon 字符识别 交流

Halcon 字符识别
最近刚开始学习halcon,对这部分有点体会,在这给大家分享一波

一 图像处理基本步骤
在图像处理中,基本可以归纳为下面四个部分:
采集图像——预处理——图像分割——识别显示

二 采集图像
采集图像方法有很多,常用的有以下几种:
(1) 通过指令read_image来读取
(2) 利用快捷键Ctrl+R来直接选择图片
(3) 在助手—打开新的Image Acquisition—勾选“图像文件”,这种方法可以一次读取多个图像

三 预处理
预处理包括灰度处理,几何变换(旋转等),去噪(高斯 中值 均值等),这是方便后续的图像分割。

四 图像分割
这部分主要有二值化法(基于灰度),形态学(腐蚀、膨胀、开运算、闭运算),特征选择,从而得到图像中所需要的信息。

五 撸上代码
halcon 字符识别 交流
*采集图像
read_image (Image123, ‘D:/HALCON17_12/数字.png’)
get_image_size (Image123, Width, Height)
*预处理
median_image (Image123, ImageMedian, ‘circle’, 1, ‘mirrored’)
dev_close_window ()
dev_open_window (0, 0, Width, Height, ‘black’, WindowHandle)
*提高黑点灰度
dots_image (ImageMedian, DotImage, 5, ‘dark’, 0)
*选取识别区域
gen_rectangle1 (ROI_0, 126, 161, 238, 424)
*计算图像中字体偏转角度
text_line_orientation (ROI_0, DotImage, 25, -0.523599, 0.523599, OrientationAngle)
vector_angle_to_rigid (Width/2, Height/2,0,Width/2, Height/2,OrientationAngle,HomMat2D)
affine_trans_image (Image123, ImageAffineTrans, HomMat2D, ‘constant’, ‘false’)
*反转亮暗(即亮的变暗,暗的变亮)
invert_image (ImageAffineTrans, ImageInvert)
*图像分割
reduce_domain (ImageInvert, ROI_0, ImageReduced)
*二值化灰度处理
binary_threshold (ImageReduced, Region, ‘max_separability’, ‘light’, UsedThreshold)
*膨胀
dilation_rectangle1 (Region, RegionDilation,1.5,6)
connection (RegionDilation, ConnectedRegions)
shape_trans (ConnectedRegions, RegionTrans, ‘rectangle1’)
*特征选择
select_shape (RegionTrans, SelectedRegions, [‘area’,‘width’], ‘and’, [319.87,3.43], [1000,20])
erosion_rectangle1 (SelectedRegions, RegionErosion, 7, 1)
partition_rectangle (RegionErosion, Partitioned, 43, 80)
intersection (Partitioned, Partitioned, RegionIntersection)
*读取神经网络ocr识别 (注意DotPrint_0-9A-Z_NoRej.omc只能识别亮的)
read_ocr_class_mlp (‘D:/HALCON17_12/ocr/DotPrint_0-9A-Z_NoRej.omc’, OCRHandle)
*排序
sort_region (RegionIntersection, SortedRegions, ‘character’, ‘true’, ‘row’)
do_ocr_multi_class_mlp (SortedRegions, ImageAffineTrans, OCRHandle, Class, Confidence)
dev_display (ImageAffineTrans)
smallest_rectangle1 (SortedRegions, Row1, Column1, Row2, Column2)
count_obj (SortedRegions, Number)
*显示
for i := 1 to Number by 1
disp_message (WindowHandle, Class[i-1], ‘image’, Row2[i-1]+120, Column1[i-1], ‘red’, ‘true’)
endfor
stop ()