经验分享:C/C++做cifar-10转换成图片

#include 
#include 
#include "cv.h"
#include "highgui.h"
#include 
#include 
#include 
using namespace std;
using namespace cv;
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
 
  
    FILE *fpr = fopen("data_batch_1.bin","rb");//打开cifar-10的一个文件
    if(fpr==NULL)
    {
        qDebug()<<"文件打开失败!";
        fclose(fpr);
        return 0;
    }
   int labelr(0);//存label
   char buffer = 0;//缓存
   int yrow = 100;//行图片数
   int xcol = 100;//列图片数
    Mat image(32*yrow,32*xcol,CV_8UC3,Scalar::all(0));//opencv 的Mat对象,用来存图片的像素矩阵
      //重点是这个循环
    for(int y = 0;y<=yrow-1;y++)//循环行图片
    {
        for(int x = 0;x<=xcol-1;x++)//列图片
        {
            fread(&labelr,sizeof(char),1,fpr);//获取每张图片前的label  不要忘记了
            qDebug()<<"label:"< 
  
            for(int b = 2;b>=0;b--)//循环RGB颜色
            {
                for(int j = 32*y;j<32*(y+1);j++)//循环行像素
                {
                    for(int i = 32*x;i<32*(x+1);i++)//循环列像素
                    {
                        fread(&buffer,sizeof(char),1,fpr);
                         image.at<Vec3b>(j,i)[b] = buffer;//用at来获取数据 ,还有其他办法,大家可以找找

                    }
                }
            }
        }
    }
    fclose(fpr);
    imshow("1",image);//显示图片
    waitKey(0);//据说没有这个就不能显示图片  没研究>
    return a.exec();
}
 
  
 
  
这是25x25的效果(10000张20M太大上传不了):
 
  
 
  
 
  
参考资料:
http://blog.csdn.net/yhl_leo/article/details/50782792  Demo 
http://blog.csdn.net/augusdi/article/details/8876459   Mat详解
第一次写  请多多包涵
 
  
 
 

你可能感兴趣的:(opencv,cifar-10,CC++,图片处理)