数字识别代码完整

article/2025/7/19 6:47:31

数字识别代码

  • 近期完成了一个数字识别的代码,开始也不会做,但通过了解和查询自己也了解到了一些在这你给大家做个分享(本代码开发环境Opencv3)
    • 这里分享给大家一个比较好的网址,我的代码也是参照的这个改动的
    • 完整的代码如下(只试过印刷体识别)
    • 运行效果图如下:

近期完成了一个数字识别的代码,开始也不会做,但通过了解和查询自己也了解到了一些在这你给大家做个分享(本代码开发环境Opencv3)

这里分享给大家一个比较好的网址,我的代码也是参照的这个改动的

链接: [link]https://blog.csdn.net/huaweiran1993/article/details/80548290?utm_medium=distribute.pc_relevant.none-task-blog-searchFromBaidu-4.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-searchFromBaidu-4.controlAlt

完整的代码如下(只试过印刷体识别)

#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>using namespace std;
using namespace cv;int getColSum(Mat src, int col)//统计所有列像素的总和
{int sum = 0;int height = src.rows;//列int width =src.cols;for (int i = 0; i < height; i++){sum = sum + src.at <uchar>(i, col);}return sum;
}int getRowSum(Mat src, int row)//统计所有行像素的总和
{int sum = 0;int height = src.rows;int width = src.cols;for (int i = 0; i < width; i++){sum +=src.at <uchar>(row, i);}return sum;
}//------------进行图片的切割------------//void cutTop(Mat& src, Mat& dstImg)//上下切割
{int top, bottom;top = 0;bottom = src.rows;int i;for (i = 0; i < src.rows; i++){int colValue = getRowSum(src, i);//统计所有行像素的总和if (colValue > 0)//扫描直到行像素的总和大于0时,记下当前位置top{top = i;break;}}for (; i <src.rows; i++){int colValue = getRowSum(src, i);//统计所有行像素的总和//cout << i << " th " << colValue << endl;if (colValue == 0)//继续扫描直到行像素的总和等于0时,记下当前位置bottom{bottom = i;break;}}int height = bottom - top;Rect rect(0, top, src.cols, height);dstImg = src(rect).clone();}int cutLeft(Mat& src, Mat& leftImg, Mat& rightImg)//左右切割{int left, right;left = 0;right = src.cols;int i;for (i = 0; i < src.cols; i++){int colValue = getColSum(src, i);//统计所有列像素的总和//cout <<i<<" th "<< colValue << endl;if (colValue > 0)//扫描直到列像素的总和大于0时,记下当前位置left{left = i;break;}}if (left == 0){return 1;}//继续扫描for (i; i < src.cols; i++){int colValue = getColSum(src, i);//统计所有列像素的总和if (colValue == 0)//继续扫描直到列像素的总和等于0时,记下当前位置right{right = i;break;}}int width = right - left;//分割图片的宽度则为right - leftRect rect(left, 0, width, src.rows);//构造一个矩形,参数分别为矩形左边顶部的X坐标、Y坐标,右边底部的X坐标、Y坐标(左上角坐标为0,0)leftImg = src(rect).clone();Rect rectRight(right, 0, src.cols - right,src.rows);//分割后剩下的原图rightImg = src(rectRight).clone();cutTop(leftImg, leftImg);//上下切割return 0;}int getPXSum(Mat &src, int &a)//获取所有像素点和{threshold(src, src, 100, 255, CV_THRESH_BINARY);a = 0;for (int i = 0; i <src.rows; i++){for (int j = 0; j < src.cols; j++){a += src.at <uchar>(i, j);}}return a;}int  getSubtract(Mat &src) //数字识别{Mat img_result;int min = 2000000;int serieNum = 0;int i;for (int i = 0; i < 10; i++){char name[200];sprintf_s(name, "%d.png", i);Mat Template = imread(name, CV_LOAD_IMAGE_GRAYSCALE);//读取模板threshold(Template, Template, 100, 255, CV_THRESH_BINARY);resize(src, src, Size(32, 58), 0, 0, CV_INTER_LINEAR);resize(Template, Template, Size(32, 58), 0, 0, CV_INTER_LINEAR);//调整尺寸//imshow(name, Template);/*让需要匹配的图分别和10个模板对应像素点值相减,然后求返回图片的整个图片的像素点值得平方和,和哪个模板匹配时候返回图片的平方和最小则就可以得到结果*/absdiff(Template, src, img_result);//AbsDiff,OpenCV中计算两个数组差的绝对值的函数。int diff=0;int a = getPXSum(img_result, diff);//获取所有像素点和if (a< min)//像素点对比{min = a;serieNum = i;}}printf("最小距离是%d ", min);printf("匹配到第%d个模板匹配的数字是%d\n", serieNum, serieNum);return serieNum;}int main(){Mat src = imread("sz3.png", CV_LOAD_IMAGE_GRAYSCALE);//读取图片imshow("原图", src);//显示原图threshold(src, src, 100, 255, THRESH_BINARY_INV);//二值化imshow("origin", src);//显示二值化后图片Mat leftImg, rightImg;int res = cutLeft(src, leftImg, rightImg);int a=0;while (res == 0){char nameLeft[10];sprintf_s(nameLeft, "%d", a);a++;imshow(nameLeft, leftImg);//显示分割后的图片Mat srcTmp = rightImg;getSubtract(leftImg);res = cutLeft(srcTmp, leftImg, rightImg);}waitKey(0);}

运行效果图如下:

在这里插入图片描述
在这里插入图片描述

---------------------------------------------------------------------希望可以帮到大家-----------------------------------------


http://chatgpt.dhexx.cn/article/K2S3sjxU.shtml

相关文章

Labview OCR数字识别

::: keywords labview,OCR,灰度,对比度,数字识别 ::: 下载文件 前言 OCR &#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;是指电子设备&#xff08;例如扫描仪或数码相机&#xff09;检查纸上打印的字符&#xff0c;通过检测暗、亮的模式确定…

ABBYY15免费照片识别文字识别软件

照片识别文字的软件有哪些&#xff1f;在日常的工作的时候&#xff0c;小伙伴们是不是经常会借助拍摄照片记录一些比较重要的事情或者是一些比较重要的笔记&#xff0c;等回头空闲出来的时候在去整理&#xff0c;那么这时候&#xff0c;如果我们运用好图片识别文字这项技术&…

ABBYY FineReader15最新专业的PDF OCR图片文字识别软件

ABBYY FineReader PDF15是专业的OCR图片文字识别软件&#xff0c;可以快速、准确、方便地将扫描纸质文件、PDF格式及数字或移动电话图像转换成可编辑格式——Microsoft Word、Excel、PowerPoint、可检索的PDF、HTML、DjVu等。99.8%的识别准确率即刻识别文本&#xff0c;复制和粘…

怎么识别数字?看看这些识别软件能不能帮上你

随着数字时代的到来&#xff0c;数字在我们的生活中出现的频率也在不断的提高&#xff0c;而数字识别在我们的生活中也有了越来越重要的作用&#xff0c;给大家举个例子&#xff0c;当我们在商店购物时&#xff0c;往往需要使用银行卡进行支付&#xff0c;在这个过程中&#xf…

完全免费的OCR文字识别软件

今天我要分享给大家的是两款完全免费的OCR文字识别软件&#xff0c;而且这两款软件都是本地版无需联网就能使用&#xff0c;而且没有使用次数的限制。 软件准备好了&#xff1a; 链接: 百度网盘 请输入提取码 提取码: 6666 01软件信息 软件名称&#xff1a;OCR文字识别软件 …

基于BP神经网络手写体数字识别的软件设计

目 录 1 绪论 1 1.1 字符识别概述 1 1.2 手写数字识别的意义和应用前景 2 1.3 字符识别的研究与发展 3 1.4 手写数字识别的难点 3 1.5 国内外研究现状 4 1.6 手写体数字识别系统概述 5 1.7 本文内容安排 6 2 手写体数字识别中预处理技术 8 2.1 平滑去噪 8 2.2 二值化 10 2.3 归…

bp神经网络_BP 神经网络驱动的手写体数字识别软件 EasyOCR

EasyOCR 项目介绍 本软件是一个手写体数字识别软件&#xff0c;采用BP神经网络&#xff0c;基于colt数学库&#xff0c;有完整源码&#xff0c;可以保存训练结果&#xff0c;基于开源例程neuralnetwork-sample&#xff0c;原作可以在GitHub中找到。主要改进了训练结果保存&…

opencv 数字识别详细教程

最近要做数字识别这块&#xff0c;但是自己又完全不懂这个&#xff0c;网上搜资料搜了好多&#xff0c;但是都没找到完整代码。只有自己慢慢搞&#xff0c;下面写下自己的过程以及代码有不好的地方希望大神可以指出&#xff0c;大家相互交流下。有需要完整代码的可以自行下载&a…

FPGA实现mnist手写数字识别(软件部分)

文章目录 FPGA实现mnist手写数字识别① 环境配置② 数据集及代码下载③ 代码操作&#xff08;1&#xff09;训练模型&#xff08;2&#xff09;权重输出&#xff08;3&#xff09;关于灰度转换 FPGA实现mnist手写数字识别 ① 环境配置 使用的环境&#xff1a;tf1.12&#xff…

pyqt5手写板+pytorch卷积神经网络,实现手写数字识别软件

卷积神经网络的结构 #定义网络结构 #不是le-net5的结构 class Net(nn.Module):def __init__(self):super(Net, self).__init__()# Sequential表示在搭建网络模型中要执行的一系列的步骤# Dropout中,p0.5表示50%的神经元不工作# layer3:输出层 一般输出层中不需要加Dropout# Co…

使用Dl4j训练的一个手写数字识别软件

DL4J使用之手写数字识别 最近一直在学习深度学习&#xff0c;由于我是Java程序员出身&#xff0c;就选择了一个面向Java的深度学习库—DL4J。为了更加熟练的掌握这个库的使用&#xff0c;我使用该库&#xff0c;以MNIST(http://yann.lecun.com/exdb/mnist/)手写数字数据集作为…

识别数字的软件有哪些?这几款识别数字工具安利给你

嘿&#xff0c;朋友们&#xff0c;你们有没有遇到过需要处理大量数字的情况&#xff0c;要是一个一个手动输入感觉十分麻烦&#xff0c;还会耗费大量时间和精力&#xff1f;别着急&#xff0c;现在数字识别的软件已经非常发达了&#xff0c;只需要一款好用的数字识别软件&#…

这款数字识别软件你知道吗

识别数字技术是指通过计算机自动识别数字的能力&#xff0c;通常采用数字图像处理和模式识别等技术进行实现。你别看这个技术好像很高大上&#xff0c;实际上现在已经有很多软件可以做到识别数字了&#xff0c;你知道识别数字的软件有哪些吗&#xff1f;今天我就为大家科普这项…

基于TensorFlow深度学习框架,运用python搭建LeNet-5卷积神经网络模型和mnist手写数字识别数据集,设计一个手写数字识别软件。

本软件是基于TensorFlow深度学习框架&#xff0c;运用LeNet-5卷积神经网络模型和mnist手写数字识别数据集所设计的手写数字识别软件。 具体实现如下&#xff1a; 1.读入数据&#xff1a;运用TensorFlow深度学习框架&#xff0c;下载并读入mnist手写数字识别数据集。 2.构建模型…

OCR手写数字识别什么软件好用?介绍一种

OCR是指用电子设备检查文本上的资料&#xff0c;然后对图像文件进行分析处理&#xff0c;从而获取文字及版面信息的过程。那OCR手写数字识别有好用的软件吗&#xff1f;当我们需要整理大量手写资料需要整理时&#xff0c;下面这两款软件就派上用场了。 软件一、我们可以使用识别…

识别数字的软件有哪些?自动识别数字的方法并不难

每个月月初时&#xff0c;作为销售助理的同事经常要整理一大堆数据&#xff0c;密密麻麻的数字看得他头晕眼花&#xff0c;特别是有些图片里的数字&#xff0c;一不小心就容易出错&#xff0c;酿成严重的数据错误。像平时我也会处理到一些数据图片&#xff0c;为了准确及时的整…

Unity 渲染YUV数据 ---- 以Unity渲染Android Camera数据为例子

1 背景 一般Unity都是RGB直接渲染的&#xff0c;但是总有特殊情况下&#xff0c;需要渲染YUV数据。比如&#xff0c;Unity读取Android的Camera YUV数据&#xff0c;并渲染。本文就基于这种情况&#xff0c;来展开讨论。 Unity读取Android的byte数组&#xff0c;本身就耗时&am…

图形学之Unity渲染管线流程分析

文章来源&#xff1a; 学习通http://www.bdgxy.com/ 普学网http://www.boxinghulanban.cn/ 智学网http://www.jaxp.net/ 表格制作excel教程http://www.tpyjn.cn/ 学习通http://www.tsgmyy.cn/ 下图是《Unity Shader 入门精要》一书中的渲染流程图&#xff1b; ApplicationS…

Unity渲染(二):Shader着色器基础入门之渲染Image图片

Unity渲染(二):图片渲染 通过这里&#xff0c;你会学习到怎么将一张图片渲染到UI的Image组件或者SpriteRenderer上&#xff0c;以及透明物体的渲染。 上一章:Unity渲染(一):着色器基础入门之纯色Shader 开发环境&#xff1a;Unity5.0或者更高 透明与不透明的最终效果 概述 1…

unity 渲染性能分析工具

目标 既然要优化&#xff0c;肯定要有个目标&#xff1a; pc上一般要求&#xff1a;一秒渲染60帧 移动端&#xff1a;一秒渲染30帧 这应该是最低的要求&#xff0c;如果游戏运行时&#xff0c;游戏帧率有变化&#xff0c;人眼能够明显的感觉到帧率下降。 优化的首要规则是找到…