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

#include <QCoreApplication>
#include <qdebug.h>
#include "cv.h"
#include "highgui.h"
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>

 

#include <iostream>
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:"<<labelr<<endl;
            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详解
第一次写  请多多包涵
 

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大笨象、小笨熊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值