资源简介
实现了基于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个文件信息
- 上一篇:微信飞机大战unity3D项目
- 下一篇:视频网站源码
相关资源
- NVIDIAOpticalFlowSDK-79c6cee80a2df9a196f20afd6
- opencv_contrib-3.4.0.zip
- opencv2.4.9源码分析——SIFT
- 用两个摄像头实现,双目标定,双目
- opencv_traincascade训练分类器,手势识别
- opencv3.0交叉编译用parallel.cpp
- 基于opencv的图像识别识别图像中的色
- 基于openCV的识别特定颜色区域
- 基于OpenCV的分水岭算法实现
- QT+opencv+OCR 身份证号码,银行卡号识别
- opencv视频特定颜色区域识别
- 把RGB转换为HSV和HSI然后根据黄色和蓝
- opencv视觉测距
- 基于Qt和opencv的身份证号码识别系统
- opencv_ffmpeg249.dll
- SfM稀疏三维点云重建--完整工程文件
- 基于opencv的数人头程序源代码
- 阿拉伯数字字符识别的简单识别
- 利用OpenCV中的Stitcher类实现全景图像拼
- opencv实现的sift算法源码,包含了图像
- openCV 上的小波变换
- 基于OPENCV的车牌识别系统设计
- 617张国内车牌60-17bmp图片用于OpenCV正样
- hog特征提取,c版本代码
- 基于Qt5.8+OpenCV3.2的Basler多相机触发开
- 基于Opencv实现的图像纠偏
- ImageWatch2019.vsix
- SIFT特征提取+匹配
- 基于SIFT算法的图像拼接.rar
- opencv4.1.1+contrib完整版.zip
评论
共有 条评论