资源简介
模仿CIFAR数据集格式制作自己的数据集代码(修改版)
代码片段和文件信息
#include “BinaryDataSet.h“
#include
#include
using namespace cv;
using namespace std;
vector BinaryDataSet::getFileLists(string file_folder)
{
/*
param
file_folder: 文件夹路径
*/
file_folder += “/*.*“;
const char *mystr = file_folder.c_str();
vector flist;
string lineStr;
vector extendName; //设置文件扩展名
extendName.push_back(“JPG“);
extendName.push_back(“jpg“);
extendName.push_back(“bmp“);
extendName.push_back(“png“);
extendName.push_back(“tiff“);
HANDLE file;
WIN32_FIND_DATA fileData;
char line[1024];
wchar_t fn[1000];
mbstowcs(fn mystr 999);
file = FindFirstFile(fn &fileData);
FindNextFile(file &fileData);
while (FindNextFile(file &fileData))
{
wcstombs(line (const wchar_t*)fileData.cFileName 259);
lineStr = line;
// remove the files which are not images
for (int i = 0; i < 4; i++)
{
if (lineStr.find(extendName[i]) < 999)
{
flist.push_back(lineStr);
break;
}
}
}
return flist;
}
/*
从文件的绝对路径当中得到文件名
例如:“C:\\Users\\lyf\\Desktop\\test.bin“,返回“test.bin“
*/
string BinaryDataSet::getFileName(string & filename)
{
/*
param
filename: 文件的绝对路径
*/
int iBeginIndex = filename.find_last_of(“\\“) + 1;
int iEndIndex = filename.length();
return filename.substr(iBeginIndex iEndIndex - iBeginIndex);
cout << “Done!“ << endl;
}
void BinaryDataSet::convertMat2Bin(cv::Mat & image int label FILE *& fp)
{
/*
param
iamge: 图片向量(一维)
label: 标签
fp: 二进制文件指针
*/
cout << “标签: “ << label << endl;
fwrite(&label sizeof(char) 1 fp); //将标签写入文件
int pixeCount = image.rows* image.cols; //计算图片像素个数
char *pData = (char*)image.data;
/*以下开始将像素值写入文件*/
for (int i = 0; i < pixeCount; i++)
fwrite(&pData[i * 3] sizeof(char) 1 fp); //写入图片的R通道
for (int i = 0; i < pixeCount; i++)
fwrite(&pData[i * 3+1] sizeof(char) 1 fp); //写入图片的G通道
for (int i = 0; i < pixeCount; i++)
fwrite(&pData[i * 3+2] sizeof(char) 1 fp); //写入图片的B通道
}
/*读取图片并变形为一维向量*/
void BinaryDataSet::mat2Binary(string & image_file int label FILE *&fp)
{
/*
param
image_file: 文件的路径及名称
label: 标签
fp: 二进制文件指针
*/
Mat image = imread(image_file IMREAD_UNCHANGED); //读取图片内容并存入image中
if (!image.data)
cout << “Image“ << getFileName(image_file) << “ load failed!“ << endl;
else
{
if (image.channels() != 3) //通道转换,将不是彩色图像的转换为彩色图像
cv::cvtColor(image image CV_BGR2RGB);
Mat image_reshaped;
cv::resize(image image_reshaped cv::Size(_iWidth _iHeight) CV_INTER_LINEAR); //将图片转换为以为向量
convertMat2Bin(image_reshaped label fp); //将一维向量的图片写入二进制文件
}
}
void BinaryDataSet::images2Binaryfiles(string filefolder vector& img_List vector& img_Labels string filename)
{
/*
param
filefolder: 图片所在的文件夹路径
img_List: 文件名列表
img_Labels: 标签列表
filename: 二进制文件保存路径
*/
const int size_list = img_List.siz
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 5350 2017-07-21 12:00 模仿CIFAR数据集格式制作自己的数据集代码\BinaryDataSet.cpp
文件 949 2017-07-20 21:54 模仿CIFAR数据集格式制作自己的数据集代码\BinaryDataSet.h
文件 823 2017-07-21 12:04 模仿CIFAR数据集格式制作自己的数据集代码\Main.cpp
文件 402 2017-07-21 12:17 模仿CIFAR数据集格式制作自己的数据集代码\readme.txt
目录 0 2017-07-21 12:07 模仿CIFAR数据集格式制作自己的数据集代码\
- 上一篇:Vue版 Web后台页面模板
- 下一篇:读取mnist数据集并保存成图片代码
评论
共有 条评论