资源简介

用来对印刷体数字识别

资源截图

代码片段和文件信息


//#include “stdafx.h“

#include 
#include “opencv2/opencv.hpp“
#include 

using namespace std;
using namespace cv;

#define SHOW_PROCESS 0
#define ON_STUDY 0

class NumTrainData
{
public:
NumTrainData()
{
memset(data 0 sizeof(data));
result = -1;
}
public:
float data[64];
int result;
};

vector buffer;
int featureLen = 64;

void swapBuffer(char* buf)
{
char temp;
temp = *(buf);
*buf = *(buf + 3);
*(buf + 3) = temp;

temp = *(buf + 1);
*(buf + 1) = *(buf + 2);
*(buf + 2) = temp;
}

void GetROI(Mat& src Mat& dst)
{
int left right top bottom;
left = src.cols;
right = 0;
top = src.rows;
bottom = 0;

//Get valid area
for (int i = 0; i {
for (int j = 0; j {
if (src.at(i j) > 0)
{
if (j if (j>right) right = j;
if (i if (i>bottom) bottom = i;
}
}
}

//Point center;
//center.x = (left + right) / 2;
//center.y = (top + bottom) / 2;

int width = right - left;
int height = bottom - top;
int len = (width < height) ? height : width;

//Create a squre
dst = Mat::zeros(len len CV_8UC1);

//Copy valid data to squre center
Rect dstRect((len - width) / 2 (len - height) / 2 width height);
Rect srcRect(left top width height);
Mat dstROI = dst(dstRect);
Mat srcROI = src(srcRect);
srcROI.copyTo(dstROI);
}

int ReadTrainData(int maxCount)
{
//Open image and label file
const char fileName[] = “../res/train-images.idx3-ubyte“;
const char labelFileName[] = “../res/train-labels.idx1-ubyte“;

ifstream lab_ifs(labelFileName ios_base::binary);
ifstream ifs(fileName ios_base::binary);

if (ifs.fail() == true)
return -1;

if (lab_ifs.fail() == true)
return -1;

//Read train data number and image rows / cols
char magicNum[4] ccount[4] crows[4] ccols[4];
ifs.read(magicNum sizeof(magicNum));
ifs.read(ccount sizeof(ccount));
ifs.read(crows sizeof(crows));
ifs.read(ccols sizeof(ccols));

int count rows cols;
swapBuffer(ccount);
swapBuffer(crows);
swapBuffer(ccols);

memcpy(&count ccount sizeof(count));
memcpy(&rows crows sizeof(rows));
memcpy(&cols ccols sizeof(cols));

//Just skip label header
lab_ifs.read(magicNum sizeof(magicNum));
lab_ifs.read(ccount sizeof(ccount));

//Create source and show image matrix
Mat src = Mat::zeros(rows cols CV_8UC1);
Mat temp = Mat::zeros(8 8 CV_8UC1);
Mat img dst;

char label = 0;
Scalar templateColor(255 0 255);

NumTrainData rtd;

//int loop = 1000;
int total = 0;

while (!ifs.eof())
{
if (total >= count)
break;

total++;
cout << total << endl;

//Read label
lab_ifs.read(&label 1);
label = label + ‘0‘;

//Read source data
ifs.read((char*)src.data rows * cols);
GetROI(src dst);

#if(SHOW_PROCESS)
//Too small to watch
img = Mat::zero

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2016-09-29 16:48  DigitReg\
     目录           0  2016-09-29 16:47  DigitReg\Debug\
     文件      106496  2016-01-10 19:04  DigitReg\Debug\DigitReg.exe
     文件      801816  2016-01-10 19:04  DigitReg\Debug\DigitReg.ilk
     文件     2026496  2016-01-10 19:04  DigitReg\Debug\DigitReg.pdb
     目录           0  2016-09-29 16:47  DigitReg\DigitReg\
     目录           0  2016-09-29 16:47  DigitReg\DigitReg\Debug\
     文件        1012  2016-01-09 22:27  DigitReg\DigitReg\Debug\DigitReg.Build.CppClean.log
     文件        1884  2016-01-10 19:04  DigitReg\DigitReg\Debug\DigitReg.log
     目录           0  2016-09-29 16:47  DigitReg\DigitReg\Debug\DigitReg.tlog\
     文件       34358  2016-01-10 19:04  DigitReg\DigitReg\Debug\DigitReg.tlog\CL.read.1.tlog
     文件        3246  2016-01-10 19:04  DigitReg\DigitReg\Debug\DigitReg.tlog\CL.write.1.tlog
     文件         163  2016-01-10 19:04  DigitReg\DigitReg\Debug\DigitReg.tlog\DigitReg.lastbuildstate
     文件        3114  2016-01-10 19:04  DigitReg\DigitReg\Debug\DigitReg.tlog\cl.command.1.tlog
     文件        2532  2016-01-10 19:04  DigitReg\DigitReg\Debug\DigitReg.tlog\link.command.1.tlog
     文件        5790  2016-01-10 19:04  DigitReg\DigitReg\Debug\DigitReg.tlog\link.read.1.tlog
     文件         868  2016-01-10 19:04  DigitReg\DigitReg\Debug\DigitReg.tlog\link.write.1.tlog
     文件        2579  2016-01-09 22:27  DigitReg\DigitReg\Debug\digit_recog.obj
     文件        2487  2016-01-09 22:27  DigitReg\DigitReg\Debug\test1.obj
     文件        2487  2016-01-09 22:27  DigitReg\DigitReg\Debug\test2.obj
     文件      358078  2016-01-10 19:04  DigitReg\DigitReg\Debug\test3.obj
     文件        2487  2016-01-10 10:33  DigitReg\DigitReg\Debug\test4.obj
     文件      814080  2016-01-10 19:04  DigitReg\DigitReg\Debug\vc120.idb
     文件     1241088  2016-01-10 19:04  DigitReg\DigitReg\Debug\vc120.pdb
     文件        5221  2016-01-09 15:46  DigitReg\DigitReg\DigitReg.vcxproj
     文件        1364  2016-01-09 15:46  DigitReg\DigitReg\DigitReg.vcxproj.filters
     文件       10858  2016-01-06 21:21  DigitReg\DigitReg\test.cpp
     文件        1767  2016-01-07 09:17  DigitReg\DigitReg\test1.cpp
     文件        2404  2016-01-08 21:06  DigitReg\DigitReg\test2.cpp
     文件        3572  2016-01-10 19:04  DigitReg\DigitReg\test3.cpp
     文件         534  2016-01-10 10:33  DigitReg\DigitReg\test4.cpp
............此处省略3个文件信息

评论

共有 条评论