本文介绍了如何从MNIST数字数据库中读取像素并创建iplimage的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我参与了手写OCR应用程序。我在这里使用MNIST数字数据库进行培训。我使用以下代码从数据库中读取像素并重新创建图像。程序不会给出任何错误但它会给出无意义的图像(全黑和模糊像素图案)作为输出。有人可以解释原因吗? PLZ帮助
这是我的代码
i am involved with handwritten OCR application. I use MNIST digit database for training process here. I use following code for read pixels from the database and re-create the image. programs doesnt give any error but it gives meaningless image(totally black and blur pixel patters) as output. can someone explain the reason for that? plz help
here is my code
int reverseInt(int i)
{
unsigned char c1, c2, c3, c4;
c1 = i & 255;
c2 = (i >> 8) & 255;
c3 = (i >> 16) & 255;
c4 = (i >> 24) & 255;
return ((int)c1 << 24) + ((int)c2 << 16) + ((int)c3 << 8) + c4;
}
void create_image(CvSize size,int channels, unsigned char* data, int imagenumber)
{
string imgname; ostringstream imgstrm;string fullpath;
imgstrm << imagenumber;
imgname=imgstrm.str();
fullpath="D:\\"+imgname+".jpg";
IplImage *imghead=cvCreateImageHeader(size, IPL_DEPTH_16S, channels);
imghead->imageData=(char *)data;
cvSaveImage(fullpath.c_str(),imghead);
}
int main()
{
ifstream file ("D:\\train-images.idx3-ubyte",ios::binary);
if (file.is_open())
{
int magic_number=0; int number_of_images=0;int r; int c;
int n_rows=0; int n_cols=0;CvSize size;unsigned char temp=0;
file.read((char*)&magic_number,sizeof(magic_number));
magic_number= reverseInt(magic_number);
file.read((char*)&number_of_images,sizeof(number_of_images));
number_of_images= reverseInt(number_of_images);
file.read((char*)&n_rows,sizeof(n_rows));
n_rows= reverseInt(n_rows);
file.read((char*)&n_cols,sizeof(n_cols));
n_cols= reverseInt(n_cols);
for(int i=0;i<number_of_images;++i)
{
for(r=0;r<n_rows;++r)
{
for(c=0;c<n_cols;++c)
{
file.read((char*)&temp,sizeof(temp));
}
}
size.height=r;size.width=c;
create_image(size,3, &temp, i);
}
}
return 0;
}
推荐答案
这篇关于如何从MNIST数字数据库中读取像素并创建iplimage的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!