基于模板匹配的数字识别,将标准的8*16像素的数字0123456789读取,二值化,对每个数字进行等分区域分割,统计每个区域内的黑色像素点的个数,即为特征初值。采用欧式距离的模板匹配法。

z//基于模板匹配的数字识别
#include<stdio.h>
#include<cv.h>
#include<highgui.h>
#include <iostream>
#include<math.h>
using namespace std;
int main()
{IplImage  *imadata0,*imadata1,*imadata2,*imadata3,*imadata4,*imadata5,*imadata6,*imadata7,*image; image=cvLoadImage("G:\\test.bmp",0);  //读取测试的数字imadata0=cvLoadImage("G:\\0.bmp",0);imadata1=cvLoadImage("G:\\1.bmp",0);imadata2=cvLoadImage("G:\\2.bmp",0);imadata3=cvLoadImage("G:\\3.bmp",0);imadata4=cvLoadImage("G:\\4.bmp",0);imadata5=cvLoadImage("G:\\5.bmp",0);imadata6=cvLoadImage("G:\\6.bmp",0);imadata7=cvLoadImage("G:\\7.bmp",0);cvNamedWindow("image",2);cvShowImage("image",image);cvWaitKey(0);//将8*16的图像直接分割为4*4int row_1,col_1;unsigned char *ptr,*ptr_1[8];
//  scanf("%d,%d",row_1,col_1);row_1=2,col_1=4;int stepx=image->width/row_1;int stepy=image->height/col_1;
//  int count=row_1*col_1;unsigned char counter[8]={'\n'};unsigned char counter_1[8][8]={'\n'};for(int row=0;row<row_1;row++){for(int col=0;col<col_1;col++){for(int i=0+stepx*row;i<stepx*(row+1);i++){for(int j=0+stepy*col;j<stepy*(col+1);j++){ptr=(unsigned char*)image->imageData+i*image->widthStep+j;if(*ptr<100)counter[row*col_1+col]+=1;ptr_1[0]=(unsigned char*)imadata0->imageData+i*image->widthStep+j;if(*ptr_1[0]<100)counter_1[0][row*col_1+col]+=1;                           ptr_1[1]=(unsigned char*)imadata1->imageData+i*image->widthStep+j;if(*ptr_1[1]<100)counter_1[1][row*col_1+col]+=1;  ptr_1[2]=(unsigned char*)imadata2->imageData+i*image->widthStep+j;if(*ptr_1[2]<100)counter_1[2][row*col_1+col]+=1;                ptr_1[3]=(unsigned char*)imadata3->imageData+i*image->widthStep+j;if(*ptr_1[3]<100)counter_1[3][row*col_1+col]+=1;  ptr_1[4]=(unsigned char*)imadata4->imageData+i*image->widthStep+j;if(*ptr_1[4]<100)counter_1[4][row*col_1+col]+=1;   ptr_1[5]=(unsigned char*)imadata5->imageData+i*image->widthStep+j;if(*ptr_1[5]<100)counter_1[5][row*col_1+col]+=1;   ptr_1[6]=(unsigned char*)imadata6->imageData+i*image->widthStep+j;if(*ptr_1[6]<100)counter_1[6][row*col_1+col]+=1;        ptr_1[7]=(unsigned char*)imadata7->imageData+i*image->widthStep+j;if(*ptr_1[7]<100)counter_1[7][row*col_1+col]+=1;     }}}}for(int ci=0;ci<8;ci++){printf("\n");for(int cj=0;cj<8;cj++){printf("%d\n",counter_1[ci][cj]);}}//欧氏距离int dis[8];double erdis(unsigned char counter[],unsigned char counter_1[][8]);dis[0]=erdis(counter,counter_1);// for(ci=0;ci<8;ci++)printf("%d\n",dis[0]);cvWaitKey(0);return 0;
}
//欧氏距离,注意不同数据类型间的强制转换~
double erdis(unsigned char counter[],unsigned char counter_1[][8]){int i,j;double sumdis[8],sum;sum=0;double sum_1[8]={0};/*归一化再求
//  for(i=0;i<8;i++){
//      for(j=0;j<8;j++){
//           sum_1[i]=sum_1[i]+(double)counter_1[i][j];
//      }//     sum=sum+(double)counter[i];//       printf("%f  %f\n",sum_1[i],sum);
//  }// for(i=0;i<8;i++){
//      for(j=0;j<8;j++)
//      {
//          counter_1[i][j]=(1000*(double)counter_1[i][j])/sum_1[i];
//          counter[i]=(1000*(double)counter[i])/sum;
//          printf("%d ",counter_1[i][j]);
//      }
//       printf("%d\n",counter[i]);
//  }
*/for(i=0;i<8;i++){for(j=0;j<8;j++){sumdis[i]=(int)(sumdis[i]+(int)pow(((int)counter_1[i][j]-(int)counter[j]),2));}printf("%f\n",sumdis[i]);
}void show(double sumdis[]);show(sumdis);return 0;
}
void show(double sumdis[]){double temp;int c;temp=sumdis[0];for(int rank=1;rank<8;rank++){      if(sumdis[rank]<temp){  temp=sumdis[rank];c=rank;printf("局部最佳匹配数%d\n",rank);}    }printf("最佳匹配数%d\n",c);
}

基于模板匹配的数字识别相关推荐

  1. 基于模板匹配的车牌识别算法,输出数字和英文字母

    目录 一.理论基础 二.核心程序 三.仿真结论 一.理论基础 车牌识别是计算机视觉领域中的一个重要问题,其目的是从图像中自动识别出车辆的车牌信息.基于模板匹配的车牌识别算法是一种常见的方法,其基本思想 ...

  2. 基于模板匹配的数字电表数字识别(python)

    模板匹配可以说是比较传统的数学方法去做图像识别,以往的模板匹配往往只是让原图像与模板图像做减运算,最后选出最小误差的那张,但在实际识别中,这一方法识别的效果并不是很有效,特别对于两张数字类型并不是很相 ...

  3. 【车牌识别】基于模板匹配实现车牌识别含Matlab源码

    1 简介 车牌识别系统是计算机视觉与模式识别技术在智能交通里的重要研究课题之一.其功能是将运动中的汽车牌照从复杂背景中提取出来,并识别出车牌号码.车牌识别技术广泛应用于高速公路上的电子收费,日常的停车 ...

  4. python中的opencv读取数字_opencv+python 机读卡识别之试错(一)模板匹配的数字识别...

    图像来源于第四部分的数字,用任意截图工具截取部分图像当作模板,比如这样: 将模板与图像对比,这个方法根据matchTemplate函数只能选出整幅图里最匹配的图像,并不能找出所有,若想找出所有,必须不 ...

  5. 【指纹识别】基于模板匹配实现指纹识别门禁系统含Matlab源码

    1 简介 近年来,随着识别技术和网络技术的飞速发展,门禁系统也得到了飞跃式的发展,出现了基于指纹识别的门禁系统.这种系统具有安全性,方便性和易管理性等特点,是确保各重要部门出入口安全的有效措施,现已广 ...

  6. 基于模板匹配的车牌识别系统实例

    这几天其实是准备做课题的,无奈车牌识别系统(界面是VS2017+Qt5.9.2做的)一直没有做完,所以一直在修正这个系统,前三天其实已经完成了,最后一天是改进识别方案,虽然个别字符识别不准确(尤其是汉 ...

  7. 【项目实战-MATLAB】:基于模板匹配的人民币识别

    下载链接:https://download.csdn.net/download/qq_45047246/74875037 完整代码: function varargout = RMB(varargin ...

  8. 【人脸识别】基于模板匹配实现人脸识别附matlab代码和GUI界面

    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.

  9. python信用卡客户_Python开发之基于模板匹配的信用卡数字识别功能

    环境介绍 python 3.6 + OpenCV 3.4.1.15 原理介绍 首先,提取出模板中每一个数字的轮廓,再对信用卡图像进行处理,提取其中的数字部分,将该部分数字与模板进行匹配,即可得到结果. ...

最新文章

  1. Element 'dependency' cannot have character [children]
  2. 力扣(LeetCode)打卡刷题交流计划(长期维护)
  3. webflux切面拦截权限,webflux整合aop,webflux获取request
  4. NLOPT ros下的使用
  5. MATLAB学习笔记(十五)
  6. PC 芯片接连抛售,失去明星工程师的东芝是如何走向末路的?
  7. 注解之RetentionPolicy,ElementType
  8. poj 2318 TOYS
  9. AcWing 143. 最大异或对
  10. 21天c语言 ppt,21天学通C语言 第1章 C语言与程序概述.ppt
  11. 雷达信号处理基础ppt
  12. NRF24L01模块----6通道通讯测试
  13. 魔兽世界稳定服务器,魔兽世界美服服务器趋于稳定 排队新技术将实装
  14. SOCKS5协议的原理和应用
  15. 如何将gif动图分解成png格式?动图分解器如何使用?
  16. VIBE 运动目标检测
  17. mac jupyter notebook 服务似乎挂掉了,但是会立刻重启的
  18. 苹果个人开发者账号出售_苹果开发者账号被调查血泪史总结
  19. matlab 频域响应,利用MATLAB软件分析系统的频率响应
  20. zedboard u-boot编译的心路历程

热门文章

  1. EDI/B2B相关工作到底做什么?Webmethods又是什么?
  2. 立体视觉——NCC视差匹配
  3. CVPR论文解读 | 弱监督的高保真服饰模特生成
  4. listview,你不知道的事(后面附有listview的焦点问题)
  5. Demo项目介绍(Maven)
  6. 安装laravel-boilerplate遇到的一些问题
  7. 计算机中的用户拒绝访问权限,win7系统打开c盘提示“拒绝访问”的处理方法
  8. 为你搜罗2006年值得推荐的日语学习软件
  9. 有排名的地方就有江湖:App刷榜江湖
  10. NASA通过WebAPP提醒你抬头看看人类连续常驻达12年的太空站