【原創原始碼】批量儲存圖片到一定數量後新建資料夾繼續儲存(檔名不重複),並記錄圖片的ID、url地址以及名稱
阿新 • • 發佈:2018-12-22
最近寫的一小段程式碼,具體實現的功能如下:
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(); }