最近写的一小段代码,具体实现的功能如下:
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();
}