设为首页
收藏本站
PLC技术网
开启辅助访问
切换到宽版
登录
注册哦
只需一步,快速开始
微信扫码登录
门户
Portal
论坛
BBS
导读
Guide
排行榜
Ranklist
搜索
搜索
本版
文章
帖子
用户
PLC论坛-全力打造可编程控制器专业技术论坛
»
论坛
›
控制专题
›
『机器视觉/AI/IoT/机器人论坛』
›
OpenCV实现0到9数字识别OCR
返回列表
发新帖
OpenCV实现0到9数字识别OCR
[复制链接]
5650
|
0
|
2024-1-11 08:50:29
|
显示全部楼层
|
阅读模式
- 高能预警,结尾有福利! -
使用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);
return0;
}
福利 - 视频6折甩卖
6月30日20:00 - 7月2日24:00,
本人视频课程全部6折!
购买课程永久免费答疑,错过又要等一年!
扫描下面二维码即可购买视频课程
源码获取:
购买任意一门课程,关注公众号后发送51CTO学院注册ID与个人邮箱至本公众号,24小时内源码演示程序发送到指定邮箱。
更多原创文章推荐
OpenCV实现图像连通组件标记与分析
基于OpenCV实现手写体数字训练与识别
OpenCV图像噪声与去噪函数方法对比使用介绍
OpenCV学堂-原创精华文章
关注【OpenCV学堂】
长按或者扫码二维码即可关注
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
注册哦
x
回复
举报
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册哦
本版积分规则
发表回复
回帖后跳转到最后一页
panyanbin123
回复楼主
返回列表
『数控/电机控制/运动控制/工业总线』
『机器视觉/AI/IoT/机器人论坛』
『高级语言/组态软件/触摸屏』
『操作系统xp/xin7/win10/linux』