資源簡介
實現了基于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 {
//加載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項目
- 下一篇:視頻網站源碼
評論
共有 條評論