数字图像字符识别——数字识别_2待识别字符图片-程序员宅基地

技术标签: 数字图像字符识别  opencv问题  openCV  

本文简单介绍图片字符识别的原理,主要识别图片中的数字,其他字符识别原理类似。

大家应该知道,对于人类来说,可以很容易理解一张图片所表达的信息,这是人类视觉系统数万年演变进化的结果。但对于计算机这个诞生进化不到百年的 “新星”,要让它理解一张图像上的信息是一个复杂的过程。计算机理解图像是一个数字计算比较的过程。

如图,我们一目了然的识别的图像中的数字,如何让计算机识别下图中的数字呢?

 

环境:VS2015+openCV3.4.0

要识别图像字符,首先需要模版库。对于识别简单字符,可自己训练,也可网上下载数据集。笔者这里就直接用提前做好的(用photoshop制作,字体和字大小尽量和待识别字符相近,不然影响识别率),为便于识别,模版名就以数字命名。

 

1. 图片预处理。首先读取待识别图像,灰度化、二值化。

Mat srcImg = imread("H:\\test.jpg",CV_LOAD_IMAGE_GRAYSCALE);//打开图片

灰度后图像:

 

threshold(srcImg, srcImg, threshVal, 255, CV_THRESH_BINARY);//二值化

我们知道图像本身就以数字进行存储的,二值化后图像就只有两个值0和255.

例数字0:

                

注意二值化的阈值根据图像实际情况进行调整。

二值化图像后:

 

2. 图像分割。我们需要将图像中的字符分割开。整个过程分两部,左右分割和上下分割。基本思想是,从图像的左上角第一列开始,从左往右逐列扫描扫描,当遇到像素值为0时,记录该列号sCol,继续扫描再遇到整列像素值为255时,记录列号eCol,sCol与eCol之间即为字符所在区间。复制二值图该区域,这样完成了左右分割;

 

将左右分割后,在此基础上再对图像进行上下分割,同理,从图像左上角第一行,向下逐行扫描,当遇到像素值为255时,记录该列号sRow,继续扫描再遇到整列像素值为0时,记录列号eRow,sRow与eRow之间即为字符所在区间。复制该区域,这样完成了上下左右分割。

 

 

3. 识别。把切割后的数字图片大小调整到和模板一样的大小(一般以模版中最大尺寸),然后让需要匹配的图和别和10个模板相减(让两个图片对应坐标像素点值相减),将所有差的绝对值求和 。

最后与哪个模板匹配时绝对值和最小,则就可以得到图像与该模版最匹配,进而识别该字符。

4. 结果。

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ganwenbo2011/article/details/80005288

智能推荐

「Python」提取json数据为txt格式成功_python接口返回json数据是text格式-程序员宅基地

文章浏览阅读3k次,点赞2次,收藏10次。步骤1、你要检查json文件利用专门的解析json文件的网站校验进行https://www.sojson.com/2、不符合JSON语法格式的会报错,这时需要修改,直到正确3、Python读取一、JSON 语法规则数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组举例问题:它报错说逗号有问题,其实不是,问题出在缺少中括号。在最外层补充中括号,JSON文件就没问题了。二、Python读取json数据完整正确的代码:import jsonfile=r'中国合作t_python接口返回json数据是text格式

编码规范_源代码 编码规范 调研表-程序员宅基地

文章浏览阅读924次。1.4.B 编码规范——如何写出简洁优美的代码 下面是来自两位C语言程序员的实现相同功能的两段代码: l 月薪1000元的程序员的代码: #include int main() { FILE *Wenjian; char Str[100]; Wenjian = fopen("test.txt","w"); do_源代码 编码规范 调研表

xcrun simctl_xcrun simctl list 不显示device-程序员宅基地

文章浏览阅读665次。当我们执行xcrun simctl --help的时候,命令行显示xcrun simctl 的帮助信息,如下面内容,代码我们仔细分析学习一下使用方式:usage: simctl [--set <path>] [--profiles <path>] <subcommand> ...**用处:**通过命令行来操作模拟器,simctl提供很多子命令,让我们根据自己的需要随机选择,但是使用子命令的时候需要指定设备,也就是在在子命令后面追加 参数,参数不同代表执行的模拟器不_xcrun simctl list 不显示device

golang——随机数(math/rand包与crypto/rand包)-程序员宅基地

文章浏览阅读1.5k次。1、math/rand 包1.1、math/rand 包实现了伪随机数生成器1.2、主要方法(1)func Seed(seed int64)设置随机种子,不设置则默认Seed(1)(2)func Int() int返回一个非负的伪随机int值(3)func Int31() int32返回一个int32类型的非负的31位伪随机数(4)func Int63() in..._use of weak random number generator (math/rand instead of crypto/rand)

微信支付-redirect uri域名与后配置不一致10003【域名配置一致情况下问题排查】_redirect_uri 域名与后配置不一致,错误码10003-程序员宅基地

文章浏览阅读8.6k次。微信支付-redirect uri域名与后配置不一致10003【域名配置一致情况下问题排查】_redirect_uri 域名与后配置不一致,错误码10003

Linux | 人生苦短,我用Vim【最受欢迎的编辑器】_人生苦短我用vim-程序员宅基地

文章浏览阅读9.8k次,点赞118次,收藏178次。一探程序员眼中的文本代码顶级编辑器Vim的使用和操作,各种模式与命令集,让你感受Vim的强大_人生苦短我用vim

随便推点

解决‘error_code‘: 110, ‘error_msg‘: ‘Access token invalid or no longer valid(百度智能云使用方法)-程序员宅基地

文章浏览阅读1.2w次,点赞2次,收藏6次。解决’error_code’: 110, ‘error_msg’: 'Access token invalid or no longer valid(百度智能云使用方法)出现上述错误,是因为没有将例子中的access token的结果进行正确替换。具体做法如下:搜索百度智能云,注册登录以车牌识别为例:产品>汽车场景文字识别>立即使用>创建应用(归属选个人,免费)>查看详细信息(生成AD AK SK,将其复制)>使用方式>API文档获取accrss token_access token invalid or no longer valid

AES加密_aes加密 csdn-程序员宅基地

文章浏览阅读339次,点赞5次,收藏10次。密钥交换算法是指在不安全的通道上,通过某种算法交换一个密钥,常用的有Diffie-Hellman(DH)算法、椭圆曲线Diffie-Hellman(ECDH)算法等。消息摘要算法是一种单向加密算法,将任意长度的数据转换成固定长度的输出,常用的有MD5、SHA-1、SHA-2等。数字签名算法是将消息或数据进行哈希计算,然后用私钥签名,验证签名时使用公钥进行验证,常用的有RSA、DSA等。非对称加密算法使用一对密钥(公钥和私钥)对数据进行加密和解密,常用的有RSA、DSA、ECC等。3、确保数据的完整性。_aes加密 csdn

电脑C盘缓存清理全攻略:手把手教你如何安全有效地释放系统空间_qindows清理c盘最终版-程序员宅基地

文章浏览阅读561次,点赞3次,收藏3次。随着计算机使用时间的增长,C盘(系统盘)中的临时文件、系统缓存和日志等数据会逐渐累积,占用大量磁盘空间,导致系统运行速度减慢。定期对C盘进行缓存清理是保持系统健康与高效的重要维护工作。本文将详细介绍如何安全且有效地清理C盘中的各类缓存,帮助用户释放宝贵的存储资源。_qindows清理c盘最终版

python中怎么获取js的输出值_使用Python中的BeautifulSoup在HTML源代码中获取JS var值(Get JS var value in HTML source using Be...-程序员宅基地

文章浏览阅读1.2k次。使用Python中的BeautifulSoup在HTML源代码中获取JS var值(Get JS var value in HTML source using BeautifulSoup in Python)我正在尝试使用BeautifulSoup从HTML源代码中获取JavaScript var值。例如我有:[other code]var my = 'hello';var name = 'hi'..._python 取得js返回值

LVGL 移植记录(2)_keil5编译lvgl失败-程序员宅基地

文章浏览阅读1.9k次,点赞2次,收藏11次。准备代码之前clone下来的3份代码说明如下修改lv_conf.h和lv_ex_conf.h1.把lvgl目录下lv_conf_template.h和lv_examples目录下lv_ex_conf_template.h复制到如下路径并去掉文件名的_template2.把这2个文件中的#if 0改成#if 1lv_conf.h是对lvgl组件进行配置lv_ex_conf.h是对lvgl提供的例子进行配置,不是很重要其中lv_conf.h需要配置如下设置屏幕尺寸#define LV_HO_keil5编译lvgl失败

(二)Go Makes Things Simple_matlab出现file format not recognized collect2.exe: e-程序员宅基地

文章浏览阅读351次。GO web_matlab出现file format not recognized collect2.exe: error: ld returned 1 exit status