【原创源码】批量保存图片到一定数量后新建文件夹继续保存(文件名不重复),并记录图片的ID、url地址以及名称

最近写的一小段代码,具体实现的功能如下:

1.反复读取本地一张图片,使用opencv更改其大小为112*112

2.使用GUID给图片命名(保证图片名称不会重复)

3.建立文件夹,每个文件夹存放400个图片,满400后建立新的文件夹(以时间命名)继续存放...以此类推

4.记录每张图片的id(建立时间)、本地url地址、文件名称到一个txt文件


C++新手,代码写得比较一般,高手见谅(抱拳)。

欢迎留言交流


实现效果:

直接上源码:

#include <bits/stdc++.h>
#include "pch.h"
#include <opencv2/opencv.hpp>
#include <iostream>
#include "objbase.h"
#include <string>
#include <tchar.h> 
#include <time.h> 
#include<direct.h>
#include<stdio.h>
#include<fstream>
#include<direct.h>
#include<io.h>

using namespace std;
using namespace cv;

//函数声明
string name();
string GuidToString();
Mat imgresize(Mat i);
string creatdoc();
string creaturl(string str);
string storage(string na, Mat image);
void record(string na, string s);

//main函数
int main()
{
	//读取图片并更改大小
	Mat ima = imread("path");  //输入图像路径 path,如C:\\Users\\Desktop\\pictures\\1.jpg
	Mat image = imgresize(ima);
	while (true)
	{
		//创建文件夹
		string str=creatdoc();
		//生成url
		string na=creaturl(str);
		//存储方法
		for (int i = 0; i < 4*100; i++)
		{
			string s=storage(na,image);
			record(na,s);
		}
	}
	return 0;
}

//生成文件名称
string name()
{
	time_t now;
	now = time(NULL); //获取日历时间 
	struct tm *local = new tm;
	localtime_s(local, &now);  //获取当前系统时间  
	string n;
	time(&now);
	struct tm t;
	localtime_s(&t, &now);
	int y = t.tm_year + 1900;
	string sy = to_string(y);
	int m = t.tm_mon + 1;
	string sm = to_string(m);
	int d = t.tm_mday;
	string sd = to_string(d);
	int h = t.tm_hour;
	string sh = to_string(h);
	int min = t.tm_min;
	string smin = to_string(min);
	int s = t.tm_sec;
	string ss = to_string(s);
	clock_t start;
	start = clock();
	start = start % 1000;
	string sss = to_string(start);
	n = sy + sm + sd + sh + smin + ss + sss;
	return n;
}

//GUID
string GuidToString()
{
	GUID guid;
	CoCreateGuid(&guid);
	char buf[64] = { 0 };
	sprintf_s(buf, sizeof(buf), "%08X%04X%04X%02X%02X%02X%02X%02X%02X%02X%02X",
		guid.Data1, guid.Data2, guid.Data3,
		guid.Data4[0], guid.Data4[1],
		guid.Data4[2], guid.Data4[3],
		guid.Data4[4], guid.Data4[5],
		guid.Data4[6], guid.Data4[7]);
	return std::string(buf);
}

//图片resize
Mat imgresize(Mat i)
{
	int resize_height = 112;
	int resize_width = 112;
	cv::Mat dst;
	cv::resize(i, dst, cv::Size(resize_width, resize_height), (0, 0), (0, 0), cv::INTER_LINEAR);
	return dst;
}

//创建文件夹
string creatdoc()
{
	string e;
	e = name();
	string str = "F:\\test\\" + e;
	const char* dir = str.c_str();
	_mkdir(dir);
	ofstream out(str);
	return str;
}

//生成url
string creaturl(string str)
{
	string na;
	na = str + "\\";
	return na;
}

//存储图片
string storage(string na,Mat image)
{
	//调用GUID
	string s = GuidToString();
	//批量命名并保存图片
	imwrite(na + s + ".jpg", image);
	return s;
}

//记录在 F:\\20180827.txt
void record(string na,string s)
{
	//记录一个id
	string g = name();
	fstream f;
	f.open("F:\\20180827.txt", std::fstream::app | std::ios::in | std::ios::out);
	f << g << '\t' << na << '\t' << s << '\n' << endl;
	f.close();
}

猜你喜欢

转载自blog.csdn.net/maitianpt/article/details/82155484