数字图像识别——基于模板匹配

本文介绍了一种针对白底黑字、字符大小一致的密集数字图像识别方法,主要采用模板匹配。首先,通过对图像进行行列分割获取每个数字,然后利用自适应模板进行匹配实现数字分类。实验结果显示,此方法在该场景下能获得较好的识别效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于数字图像识别,其实有很多方法,例如模板匹配、神经网络、支持向量机等。但是,在这里我们处理的情况比较简单,主要体现在如下两点:(1)场景简单,是白底黑字;(2)具有明显可利用的特点,这个对于数字识别很重要。其实,在matlab中就有一个OCR的函数可以识别数字、标点和英文字母,但是,该算法对于数字比较密集的情况下,识别能力有限。 


现在简介一下我的识别程序处理的场景,如下图测试图像所示,我们处理的是白底黑字、字符大小一样的密集的图像。在这里首先想到的是将数字分割出来,通过观察我们发现具有如下特点:(1)行与行之间的间隔比较明显,可以轻松分割出各个行;(2)列与列之间的间隔可以大于字符之间的间隔;(3)在同一个数字中,每隔3个进位会产生一个比较大的间隔,但是,仍然小于列之间的间隔。



根据上述特点,整理出如下的思路来实现数字识别:

(1)对图像中的数字按行列进行分割,以获取每一个数字;

                        (2)通过构造自适应构造模板进行模板匹配,实现数字图像分类。尽管这个思路是如此的简单,但是,在该场景中,仍然可以获得很好的识别效果。

先看测试图像和识别结果如下:

测试图像:


输出结果: 

Outputs = 



  Columns 1 through 9


    '133.133.133.252'    '40756'    '36.110.219.248'    '80'      '4'      '532'      '2'    '420'     '2'
    '133.133.133.252'    '54147'    '36.110.219.248'    '80'      '13'     '1888'    '7'    '1156'    '6'
    '127.0.0.1'            '33293'    '127.0.0.1'          '6477'    '2'      '132'      '1'    '76'      '1'


  Columns 10 through 11


    '112'    '1.025877000'
    '732'    '1.030972000'
    '56'     '2.002403000'

代码如下:

(1)主程序部分如下(其中Font_10.png在后面):

close all;
clear all;
clc;
filepath = mfilename('fullpath');
filename = mfilename();
jarfilepath = filepath(1:end-length(filename));
javaaddpath(fullfile(jarfilepath,'SimpleCaptureScreen.jar'));
ScreenCapture = javaObjectEDT('com.huawei.ScreenCapture.SimpleCaptureScreen');
ScreenCapture.MainCaptureScreen;
Img = imread('MyCaptureScreen.png');
TemplateImg = imread('Font_10.png'); 
Font = 10; 
Scale = 4; % 原始图像放大倍数
% 创建模板
[Templat
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值