惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

L
LangChain Blog
博客园 - 司徒正美
美团技术团队
Martin Fowler
Martin Fowler
雷峰网
雷峰网
aimingoo的专栏
aimingoo的专栏
博客园 - 三生石上(FineUI控件)
Vercel News
Vercel News
酷 壳 – CoolShell
酷 壳 – CoolShell
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
爱范儿
爱范儿
U
Unit 42
Y
Y Combinator Blog
月光博客
月光博客
Hugging Face - Blog
Hugging Face - Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
有赞技术团队
有赞技术团队
GbyAI
GbyAI
H
Help Net Security
量子位
Last Week in AI
Last Week in AI
博客园_首页
腾讯CDC
小众软件
小众软件

博客园 - 凤凰_1

多边形近似:最小周长多边形算法MPP 多阈值otsu的opencv实现 在Opencv中自定义了一个相位函数,获取复数矩阵的相位 cvIsInf与cvIsNan函数 Mandelbrot set 以parallel_for_实现 opencv的并行操作parallel_for_的问题 CV_WRAP和CV_EXPORTS_W opencv超级像素示例 opencv中自定义的双线性二次插值的图像旋转及缩放 在Qt中,如何在sheets末端添加新的sheet opencv4.x 中的plot函数绘制二维Mat C++版DNN最简主体框架 C++版全连接神经网络 C++版加载MNIST图像集合 c\c++宏定义,四个参数求最大值 - 凤凰_1 - 博客园 自定义c++二维动态数组 用Cmake 编译OpenCV常见的错误 Opencv中的dft()和idft()示例 C++仿Matlab的bsxfun函数
C++版的神经网络训练用的图像集合加载
凤凰_1 · 2022-07-15 · via 博客园 - 凤凰_1

1、构造图像的基本单元类

class ImgUnit
{
public:
    ImgUnit(unsigned char *p)
    {
        for(int i=0;i<3;i++)
        {
            unsigned char *pp=p+1+i*1024;
            m[i]=Mat(32,32,CV_8U,pp);
        }
        merge(m,3,m_bgr);

        label=(int)p[0];
//        imshow("img unit",m_bgr);
    }
    ImgUnit(){}
    void makeImg(unsigned char *p)
    {
        for(int i=0;i<3;i++)
        {
            unsigned char *pp=p+1+i*1024;
            m[(2-i)]=Mat(32,32,CV_8U,pp);
        }
        merge(m,3,m_bgr);

        label=(int)p[0];
    }
    Mat m[3];
    Mat m_bgr;
    int label;
};
//1.加载训练图片
void loadImgSet(ImgUnit *imgset,string datapath)
{
    unsigned char* p=new unsigned char[30730000];
    ifstream infile(datapath,ios::binary);
    if(!infile)
    {
        cerr<<"open err!"<<endl;
        exit(1);
    }
    infile.read((char*)p,30730000);

    for(int i=0;i<10000;i++)

    {
        uchar* pi=p+i*3073;
        imgset[i].makeImg(pi);
    }
    infile.close();
}

2. 测试程序

#include <iostream>
#include<opencv2/opencv.hpp>
#include<myfunction.hpp>
#include<iostream>
#include<fstream>

#include<string.h>
using namespace cv;
using namespace std;


int main()
{
    ImgUnit* imgset=new ImgUnit[10000];

    string datapath="D:/Qt/MyImage/cifar10/data_batch_1.bin";
    loadImgSet(imgset,datapath);

    Mat ms[100];
    Mat implay(640,640,CV_8UC3,Scalar::all(0));


    for(int i=0;i<100;i++)
    {
        resize(imgset[i+100].m_bgr,ms[i],Size(64,64),0,0,INTER_CUBIC);
        int y=i/10,x=i%10;
        Mat temp=implay(Rect(x*64,y*64,64,64));
        ms[i].copyTo(temp);
    }
    imshow("100 image",implay);
    waitKey();

    delete [] imgset;

    return 0;
}

运行结果如下,显示了一百幅图像,说真的,我人眼都识别不了,不知道机器式怎么识别的:)  :