专栏首页贾志刚-OpenCV学堂OpenCV实现0到9数字识别OCR

OpenCV实现0到9数字识别OCR

使用OpenCV对0到9数字进行识别,实现简单OCR功能,基于CA(轮廓)分析实现特征提取,基于L1距离计算匹配实现数字识别。在排除干扰的基础上,识别精度可以达到98%以上。整个算法分为两个部分,第一部分是特征提取,提取的特征实现了尺度不变性与轻微光照与变形干扰排除,第二部分基于特征数据进行匹配实现了相似性比较,最终识别0到9十个数字。

第一部分详解:

算法的第一部分主要是实现以下功能,提取42个特征向量,用其中40个向量做匹配识别,另外两个向量做辅助检查。比如0跟1的横纵比有明显差别。特征提取的主要步骤如下:

1. 图像去噪声与二值化 2. 轮廓发现与ROI区域分割 3. 水平与垂直投影,提取20个向量,并归一化 4. 网格分割5x4,提取20个向量,并归一化 5. 宽高比与空白比,总计42个向量提取完成

预处理通过高斯模糊去噪声,然后通过全局阈值实现图像二值化,使用轮廓发现提取ROI矩形区域,对每个区域完成3~5步,实现特征提取,其中水平与垂直投影演示如下:

对ROI区域的水平与垂直投影分别分成10个BIN,考虑到浮点数划分,每个BIN长度不一定是整数,这样就通过权重进行按比例分割像素点。完成每个BIN的前景像素点统计。

同样对数字ROI区域实现5x4的网格分割,每个Cell计算前景像素个数,也会借助权重比例进行分割,最终得到归一化之后的20个特征向量。

这样得到的40个特征向量具有放缩不变性与轻微抗干扰变形能力。

第二部分详解:

运行截图:

训练数据:

输入数据:

识别结果:

观察结论

训练数据和识别数据在字体、大小上均有差异,然而根据提取的特征进行匹配,均可识别,充分证明了本识别算法的尺度不变性与局部抗干扰能力。

执行代码

int main(int argc, char** argv) {
    Mat src = imread("D:/vcprojects/images/td1.png");
    if (src.empty()) {
        printf("could not load image...\n");
        return -1;
    }
    namedWindow("input image", CV_WINDOW_AUTOSIZE);
    imshow("input image", src);

    // 训练
    train_data();

    // 测试
    test_data();

    waitKey(0);
    return 0;
}

本文分享自微信公众号 - OpenCV学堂(CVSCHOOL)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-06-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 一种快速简便优秀的全局曲线调整与局部信息想结合的非线性彩色增强算法(多图深度分析和探索)

    本文的分析基于《Adaptive and integrated neighborhood-dependent approach for nonlinear en...

    OpenCV学堂
  • 竞赛比完,代码、模型怎么处理?Kaggle大神:别删,这都是宝藏

    很多人可能参加过许多比赛,做过许多项目,但比赛或项目结束之后,曾经写过的代码、用过的模型就被丢到了一边,甚至不久就被删掉。

    OpenCV学堂
  • 好消息 | Github代码私仓免费了

    我只看了到 free 还有 private repo 我就没往下继续看!其实我一直有两个github账号,第一个账号叫 gloomyfish, 就是下面这个地址...

    OpenCV学堂
  • 联合国发布用于反恐的生物识别最佳实践手册

    反恐斗争中生物识别技术的应用不断扩大,联合国正采取措施对此进行监管,发布了一份参考指南,名为“联合国关于反恐斗争中负责任地使用与分享生物识别技术的建议实践概要”...

    人工智能快报
  • Sequence model

    在训练过程中,结局梯度爆炸 gradient clipping:梯度过大时,重新缩放梯度向量

    列夫托尔斯昊
  • 2.3 光栅化阶段

    光栅化:决定哪些像素被集合图元覆盖的过程(Rasterization is the process of determining the set of pixe...

    代码咖啡
  • Datawhale 零基础入门CV赛事-Task1 赛题理解

    Datawhale 零基础入门CV赛事-Task1 赛题理解 本章内容将会对街景字符识别赛题进行赛题背景讲解,对赛题数据的读取进行说明,并给出集中解题思路。

    致Great
  • 【自然框架】之鼠标点功能现(一):单表的增删改查(即上次5月23日活动的一个主题)【Demo、源码下载】

    简单的需求,点点鼠标就可以了,那么复杂的需求呢?还是要写代码,哈哈。 不要被我误导了哦,关于什么时候写代码的问题,请看这里:http://www.cnblogs...

    用户1174620
  • 院士谭铁牛:智能化时代生物识别的机遇与挑战(附报告全文)

    大数据文摘
  • 未来布局之星——ConstraintLayout

    ConstraintLayout是Android Studio 2.2中具有亮点的新功能之一,相比于RelativeLayout、LinearLayout等传统...

    代码咖啡

扫码关注云+社区

领取腾讯云代金券