基于opencv的手写数字字符识别


实现了基于opencv 的手写数字字符识别 主要参照文章: http://blog.damiles.com/2008/11/basic-ocr-in-opencv/ 基本上就是按着人家的代码来配置的,完后小改动了几个参数,写了一个文档,方便大家学习吧。
资源截图
代码片段和文件信息
/*
 *  basicOCR.c
 *  
 *
 *  Created by damiles on 18/11/08.
 *  Copyright 2008 Damiles. GPL License
 *
 */
#ifdef _CH_
#pragma package 
#endif

#ifndef _EiC
#include “cv.h“
#include “highgui.h“
#include “ml.h“
#include 
#include 
#include 
#endif

#include “preprocessing.h“
#include “basicOCR.h“

basicOCR::basicOCR()//构造函数
{

//initial
sprintf(file_path  “OCR/“);
train_samples = 50;//训练样本,总共100个,50个训练,50个测试
classes= 10;//暂时识别十个数字

size=128;//


trainData = cvCreateMat(train_samples*classes size*size CV_32FC1);//训练数据的矩阵
trainClasses = cvCreateMat(train_samples*classes 1 CV_32FC1);

//Get data (get images and process it)
getData();

//train
train();
//Test
test();

printf(“ ------------------------------------------------------------------------
“);
printf(“| 识别结果 |  测试精度 |   准确率 |
“);
printf(“ ------------------------------------------------------------------------
“);


}



void basicOCR::getData()
{
IplImage* src_image;
IplImage prs_image;
CvMat rowdata;
char file[255];
int ij;
for(i =0; i {
for( j = 0; j< train_samples; j++)
{

//加载pbm格式图像,作为训练
if(j<10)
sprintf(file“%s%d/%d0%d.pbm“file_path i i  j);
else
sprintf(file“%s%d/%d%d.pbm“file_path i i  j);
src_image = cvLoadImage(file0);
if(!src_image)
{
printf(“Error: Cant load image %s
“ file);
//exit(-1);
}
//process file
prs_image = preprocessing(src_image size size);

//Set class label
cvGetRow(trainClasses &row i*train_samples + j);
cvSet(&row cvRealScalar(i));
//Set data 
cvGetRow(trainData &row i*train_samples + j);

IplImage* img = cvCreateImage( cvSize( size size ) IPL_DEPTH_32F 1 );
//convert 8 bits image to 32 float image
cvConvertScale(&prs_image img 0.0039215 0);

cvGetSubRect(img &data cvRect(00 sizesize));

CvMat row_header *row1;
//convert data matrix sizexsize to vecor
row1 = cvReshape( &data &row_header 0 1 );
cvCopy(row1 &row NULL);
}
}
}

void basicOCR::train()
{
knn=new CvKNearest( trainData trainClasses 0 false K );
}

float basicOCR::classify(IplImage* img int showResult)//第二个参数主要用来控制是测试训练样本还是手写识别
{
IplImage prs_image;
CvMat data;
CvMat* nearest=cvCreateMat(1KCV_32FC1);
float result;
//处理输入的图像
prs_image = preprocessing(img size size);

//Set data 
IplImage* img32 = cvCreateImage( cvSize( size size ) IPL_DEPTH_32F 1 );
cvConvertScale(&prs_image img32 0.0039215 0);
cvGetSubRect(img32 &data cvRect(00 sizesize));
CvMat row_header *row1;
row1 = cvReshape( &data &row_header 0 1 );

result=knn->find_nearest(row1K00nearest0);

int accuracy=0;
for(int i=0;i {
if( (nearest->data.fl[i]) == result)
                    accuracy++;
}
float pre=100*((float)accuracy/(float)K);
if(showResult==1)
{
printf(“|     %.0f     |      %.2f%%   |   %d of %d  | 
“resultpreaccuracyK);
printf(“ ------------

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     248320  2013-11-29 17:36  基于opencv 的手写数字字符识别基于opencv的手写数字字符识别.doc

     文件    1539898  2013-11-19 11:03  基于opencv 的手写数字字符识别基于OpenCV的脱机手写字符识别技术_许雁飞.pdf

     文件      87515  2013-11-27 19:24  基于opencv 的手写数字字符识别实验结果截图实验结果2.jpg

     文件      89254  2013-11-27 19:26  基于opencv 的手写数字字符识别实验结果截图实验结果9.jpg

     文件      29696  2013-11-24 22:12  基于opencv 的手写数字字符识别流程图主流程图.vsd

     文件      59904  2013-11-25 17:39  基于opencv 的手写数字字符识别流程图细化流程图.vsd

     文件   23581429  2013-11-28 16:19  基于opencv 的手写数字字符识别源代码VS工程Character_Recognition.rar

     文件       3885  2013-11-27 20:08  基于opencv 的手写数字字符识别源代码代码asicOCR.cpp

     文件        608  2013-11-26 17:34  基于opencv 的手写数字字符识别源代码代码asicOCR.h

     文件       3534  2013-11-25 22:47  基于opencv 的手写数字字符识别源代码代码main.cpp

     文件       3013  2013-11-27 17:53  基于opencv 的手写数字字符识别源代码代码preprocessing.cpp

     文件        319  2013-11-21 20:47  基于opencv 的手写数字字符识别源代码代码preprocessing.h

     文件    2992128  2013-11-27 20:08  基于opencv 的手写数字字符识别程序Character_Recognition.exe

     文件      16580  2012-07-02 01:25  基于opencv 的手写数字字符识别程序OCR00.pbm

     文件      16580  2012-07-02 01:25  基于opencv 的手写数字字符识别程序OCR01.pbm

     文件      16580  2012-07-02 01:25  基于opencv 的手写数字字符识别程序OCR02.pbm

     文件      16580  2012-07-02 01:25  基于opencv 的手写数字字符识别程序OCR03.pbm

     文件      16580  2012-07-02 01:25  基于opencv 的手写数字字符识别程序OCR04.pbm

     文件      16580  2012-07-02 01:25  基于opencv 的手写数字字符识别程序OCR05.pbm

     文件      16580  2012-07-02 01:25  基于opencv 的手写数字字符识别程序OCR06.pbm

     文件      16580  2012-07-02 01:25  基于opencv 的手写数字字符识别程序OCR07.pbm

     文件      16580  2012-07-02 01:25  基于opencv 的手写数字字符识别程序OCR08.pbm

     文件      16580  2012-07-02 01:25  基于opencv 的手写数字字符识别程序OCR09.pbm

     文件      16580  2012-07-02 01:25  基于opencv 的手写数字字符识别程序OCR10.pbm

     文件      16580  2012-07-02 01:25  基于opencv 的手写数字字符识别程序OCR11.pbm

     文件      16580  2012-07-02 01:25  基于opencv 的手写数字字符识别程序OCR12.pbm

     文件      16580  2012-07-02 01:25  基于opencv 的手写数字字符识别程序OCR13.pbm

     文件      16580  2012-07-02 01:25  基于opencv 的手写数字字符识别程序OCR14.pbm

     文件      16580  2012-07-02 01:25  基于opencv 的手写数字字符识别程序OCR15.pbm

     文件      16580  2012-07-02 01:25  基于opencv 的手写数字字符识别程序OCR16.pbm

............此处省略1005个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)