从图像中识别和读取数字

16 篇文章 0 订阅
7 篇文章 0 订阅

下述代码是一个使用HALCON软件编写的OCR(光学字符识别)程序,它主要用于从图像中识别和读取数字。

read_image (Image, ‘ocr/color_form_01’)
get_image_pointer3 (Image, PointerRed, PointerGreen, PointerBlue, Type, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width, Height, ‘black’, WindowID)
dev_display (Image)
dev_set_line_width (3)
dev_set_draw (‘margin’)
dev_update_window (‘off’)

  • Read the classifier to use for reading the text.
  • It is easiest to use the pre-trained font Industrial_0-9_NoRej. If you
  • have run the program ocrcolort.hdev in this directory, you can activate
  • the second line to use the font trained with this program.
    read_ocr_class_mlp (‘Industrial_0-9_NoRej’, OCRHandle)
  • read_ocr_class_mlp (‘ocrcolor’, OCRHandle)
  • LOOP: Process all Images

NumImages := 8
for img := 1 to NumImages by 1
read_image (Image, ‘ocr/color_form_0’ + img)
*
* Detect foreground
*
mean_image (Image, Mean, 3, 3)
decompose3 (Mean, Red, Green, Blue)
threshold (Green, ForegroundRaw, 0, 220)
clip_region (ForegroundRaw, Foreground, 3, 3, Height - 4, Width - 4)
*
* Divide colors
*
reduce_domain (Red, Foreground, RedReduced)
reduce_domain (Green, Foreground, GreenReduced)
sub_image (RedReduced, GreenReduced, ImageSub, 2, 128)
mean_image (ImageSub, ImageMean, 3, 3)
binary_threshold (ImageMean, Cluster1, ‘smooth_histo’, ‘dark’, UsedThreshold)
difference (Foreground, Cluster1, Cluster2)
concat_obj (Cluster1, Cluster2, Cluster)
opening_circle (Cluster, Opening, 2.5)
smallest_rectangle1 (Opening, Row1, Column1, Row2, Column2)
WidthCluster := Column2 - Column1 + 1
if (WidthCluster[0] > WidthCluster[1])
select_obj (Opening, NumberRegion, 2)
else
select_obj (Opening, NumberRegion, 1)
endif
*
* Expand Numbers
*
closing_rectangle1 (NumberRegion, NumberCand, 1, 20)
difference (Image, NumberCand, NoNumbers)
connection (NumberRegion, NumberParts)
intensity (NumberParts, Green, MeanIntensity, Deviation)
expand_gray_ref (NumberParts, Green, NoNumbers, Numbers, 20, ‘image’, MeanIntensity, 48)
union1 (Numbers, NumberRegion)
connection (NumberRegion, Numbers)
*
* Fine tuning
*
fill_up_shape (Numbers, RegionFillUp, ‘area’, 1, 100)
opening_circle (RegionFillUp, FinalNumbersUnsorted, 3.5)
sort_region (FinalNumbersUnsorted, FinalNumbers, ‘character’, ‘true’, ‘row’)
dev_set_color (‘blue’)
dev_display (Image)
dev_display (FinalNumbers)
count_obj (FinalNumbers, NumNumbers)
union1 (FinalNumbers, NumberRegion)
difference (Image, NumberRegion, NoNumbers)
paint_region (NoNumbers, Green, ImageOCRRaw, 255, ‘fill’)
paint_region (NumberRegion, ImageOCRRaw, ImageOCR, 0, ‘fill’)
*
* OCR
*
do_ocr_multi_class_mlp (FinalNumbers, ImageOCR, OCRHandle, RecChar, Confidence)
set_display_font (WindowID, 27, ‘mono’, ‘true’, ‘false’)
disp_message (WindowID, sum(RecChar), ‘window’, 32, 24, ‘blue’, ‘false’)
if (img < NumImages)
set_display_font (WindowID, 16, ‘mono’, ‘true’, ‘false’)
disp_continue_message (WindowID, ‘black’, ‘true’)
stop ()
endif
endfor
clear_ocr_class_mlp (OCRHandle)
dev_update_window (‘on’)

color_form_01.png
在这里插入图片描述

color_form_02.png
在这里插入图片描述

color_form_03.png
在这里插入图片描述

color_form_04.png
在这里插入图片描述

color_form_05.png
在这里插入图片描述

color_form_06.png
在这里插入图片描述

color_form_07.png
在这里插入图片描述

color_form_08.png
在这里插入图片描述
以下是程序运行结果
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
以下是代码的主要功能和步骤:

图像读取:使用read_image函数读取名为’ocr/color_form_1’的图像。

图像指针获取:使用get_image_pointer3获取图像的三个颜色通道的指针。

窗口操作:使用dev_close_window关闭当前窗口,然后使用dev_open_window打开一个新的窗口用于显示图像。

图像显示:使用dev_display函数将图像显示在新打开的窗口中。

OCR分类器读取:使用read_ocr_class_mlp函数读取预训练的OCR分类器’Industrial_-9_NoRej’,这个分类器用于识别工业数字。

图像处理循环:通过一个for循环处理多张图像,每张图像的名称格式为’ocr/color_form_’ + img。

前景检测:使用mean_image和threshold函数检测图像中的前景区域。

颜色分割:通过decompose3、reduce_domain和sub_image等函数对图像的颜色通道进行分割和处理。

区域扩展:使用expand_gray_ref函数对数字区域进行扩展,以改善OCR识别的准确性。

形状调整:使用fill_up_shape和opening_circle等函数对数字区域进行形状调整和细化。

数字排序:使用sort_region函数对数字区域进行排序,以便于OCR识别。

OCR识别:使用do_ocr_multi_class_mlp函数对排序后的数字区域进行OCR识别,得到识别结果和置信度。

结果显示:使用disp_message函数在窗口中显示识别结果。

循环控制:在循环的每次迭代结束时,使用disp_continue_message和stop函数等待用户操作,以便继续或停止程序。

资源清理:在循环结束后,使用clear_ocr_class_mlp函数清理OCR分类器资源。

窗口更新:最后,使用dev_update_window函数开启窗口更新,以显示最终的图像结果。

整个程序是一个自动化的OCR流程,用于从特定格式的图像中识别数字,并将识别结果展示给用户。这种类型的程序在工业自动化、数据录入和文档处理等领域有广泛的应用。

评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Happy Monkey

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值