• 大小: 24.49MB
    文件类型: .rar
    金币: 2
    下载: 1 次
    发布日期: 2023-06-28
  • 语言: 其他
  • 标签: 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(“ ------------------------------------------------------------------------\n“);
printf(“|\t识别结果\t|\t 测试精度\t|\t  准确率\t|\n“);
printf(“ ------------------------------------------------------------------------\n“);


}



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\n“ 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(“|\t    %.0f    \t| \t    %.2f%%  \t| \t %d of %d \t| \n“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 的手写数字字符识别\源代码\代码\basicOCR.cpp

     文件        608  2013-11-26 17:34  基于opencv 的手写数字字符识别\源代码\代码\basicOCR.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 的手写数字字符识别\程序\OCR\0\000.pbm

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

评论

共有 条评论