1. 程式人生 > >【原創原始碼】批量儲存圖片到一定數量後新建資料夾繼續儲存(檔名不重複),並記錄圖片的ID、url地址以及名稱

【原創原始碼】批量儲存圖片到一定數量後新建資料夾繼續儲存(檔名不重複),並記錄圖片的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();
}