static int ReverseInt(int i) //转换魔数,读取数据库中的图片数,行数,列数等信息
{
unsigned char ch1, ch2, ch3, ch4;
ch1 = i & 255;
ch2 = (i >> 8) & 255;
ch3 = (i >> 16) & 255;
ch4 = (i >> 24) & 255;
return((int)ch1 << 24) + ((int)ch2 << 16) + ((int)ch3 << 8) + ch4;
}
FileStorage ImageDataSet;//将数字库中的数据转换成Mat图片类型(28*28),并保存到xml文件中
ImageDataSet.open("/home/shensy/Code/c++/opencv3编程入门/手写数字识别/database/TestImageDataSet.xml",FileStorage::WRITE);
ifstream file;
file.open("/home/shensy/Code/c++/opencv3编程入门/手写数字识别/database/t10k-images-idx3-ubyte",ifstream::binary);
int magic_number = 0;
int number_of_images = 0;
int n_rows = 0;
int n_cols = 0;
file.read((char*)&magic_number, sizeof(magic_number));
file.read((char*)&number_of_images, sizeof(number_of_images));
file.read((char*)&n_rows, sizeof(n_rows));
file.read((char*)&n_cols, sizeof(n_cols));
magic_number=ReverseInt(magic_number);
number_of_images=ReverseInt(number_of_images);
n_rows=ReverseInt(n_rows);
n_cols=ReverseInt(n_cols);
//cout<<ReverseInt(magic_number)<<" "<<ReverseInt(number_of_images)<<" "<<ReverseInt(n_rows)<<" "<<ReverseInt(n_cols)<<endl;
for(int i=0;i<number_of_images;i++)
{
Mat tupian(n_rows,n_cols,CV_8UC1);
string ss="image"+to_string(i);
for(int j=0;j<n_rows;j++)
{
for(int k=0;k<n_cols;k++)
{
unsigned char temp=0;
file.read((char*)&temp, sizeof(temp));
tupian.at<unsigned char>(j,k)=(int)temp;
}
}
ImageDataSet<<ss<<tupian;
cout<<"保存第"<<i<<"张图片"<<endl;
}
file.close();
ImageDataSet.release();
FileStorage ImageDataSet;//保存标签值
ImageDataSet.open("/home/shensy/Code/c++/opencv3编程入门/手写数字识别/database/TestLabelDataSet.xml",FileStorage::WRITE);
ifstream file;
file.open("/home/shensy/Code/c++/opencv3编程入门/手写数字识别/database/t10k-labels-idx1-ubyte",ifstream::binary);
int magic_number = 0;
int number_of_images = 0;
int n_rows = 0;
int n_cols = 0;
file.read((char*)&magic_number, sizeof(magic_number));
file.read((char*)&number_of_images, sizeof(number_of_images));
magic_number=ReverseInt(magic_number);
number_of_images=ReverseInt(number_of_images);
//cout<<ReverseInt(magic_number)<<" "<<ReverseInt(number_of_images)<<" "<<ReverseInt(n_rows)<<" "<<ReverseInt(n_cols)<<endl;
for(int i=0;i<number_of_images;i++)
{
string ss="label"+to_string(i);
unsigned char temp=0;
file.read((char*)&temp, sizeof(temp));
ImageDataSet<<ss<<(int)temp;
cout<<"保存第"<<i<<"个标签"<<endl;
}
file.close();
ImageDataSet.release();