C++/opencv/pcl实现按时间创建文件夹并保存图片和点云

C++/opencv/pcl实现按时间创建文件夹并保存图片和点云

本人做的是双目视觉方向,有个应用场景就是采集大量的3d数据保存下来,作为后续开发的数据集使用。为此就需要开发保存的功能,并且是大量连续的采集保存,所以用时间来作为命名方式保存数据,要结合opencv和pcl一起使用。

#define _SILENCE_FPOS_SEEKPOS_DEPRECATION_WARNING
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<Windows.h>
#include<direct.h>
#include<fstream>
#include<sstream>

#include<Shlwapi.h>
#pragma comment(lib, "shlwapi.lib")

#include <opencv2\opencv.hpp>      
#include<opencv2/core/types.hpp>
#include<opencv2/core/core.hpp>
#include <pcl/io/pcd_io.h>
#include<pcl/io/ply_io.h>

using namespace pcl;
using namespace cv;
using namespace std;


class FileOperation
{
public:
	FileOperation();
	~FileOperation();
public:
	void saveDataInFolder(string initFolderName,vector<Mat>&leftImgs, vector<Mat>&rightImgs, PointCloud<PointXYZRGB>&resultCloud);
private:
	string WORD2string(WORD w);
	bool IsFolderExist(string strName);
	string getCurTimeString();
	string getCurTimeStringInf();
};
FileOperation::FileOperation()
{
}
FileOperation::~FileOperation()
{
}


string FileOperation::WORD2string(WORD w)
{
	char tmpbuff[16];
	sprintf_s(tmpbuff, "%d", w);
	string res = tmpbuff;
	return res;
}

string FileOperation::getCurTimeString()
{
	SYSTEMTIME curTime;
	GetLocalTime(&curTime);
	string curTimestr= WORD2string(curTime.wYear)+ WORD2string(curTime.wMonth) + WORD2string(curTime.wDay) + WORD2string(curTime.wHour) +  WORD2string(curTime.wMinute)  + WORD2string(curTime.wSecond);
	return curTimestr;
}

string FileOperation::getCurTimeStringInf()
{
	SYSTEMTIME curTime;
	GetLocalTime(&curTime);
	string curTimestr = WORD2string(curTime.wYear)+"年" + WORD2string(curTime.wMonth) + "月" + WORD2string(curTime.wDay) + "日" + WORD2string(curTime.wHour) + "时" + WORD2string(curTime.wMinute) + "分" + WORD2string(curTime.wSecond) + "秒";
	return curTimestr;
}

bool FileOperation::IsFolderExist(string strName)
{
	size_t size = strName.length();
	wchar_t *buffer = new wchar_t[size + 1];
	MultiByteToWideChar(CP_ACP, 0, strName.c_str(), size, buffer, size * sizeof(wchar_t));
	buffer[size] = 0;  // 确保以 '\0' 结尾 
	BOOL bExist = PathIsDirectory(buffer);
	delete buffer;
	return bExist == FALSE ? false : true;
}

void FileOperation::saveDataInFolder(string initFolderName, vector<Mat>&leftImgs, vector<Mat>&rightImgs, PointCloud<PointXYZRGB>&resultCloud)
{
	bool isinitFolderExit = IsFolderExist(initFolderName);//判断根文件夹是否存在
	if (!isinitFolderExit)
	{
		_mkdir(initFolderName.c_str());//如果根文件夹不存在则创建
	}
	string firstTime = getCurTimeStringInf();
	string firstTimestr = getCurTimeString();
	string dirName = initFolderName + "\\" + firstTime;
	_mkdir(dirName.c_str());//创建实时文件夹
	for (int i = 0; i < leftImgs.size(); i++)
	{
		imwrite(dirName + format("\\left%d.bmp", i), leftImgs[i]);
	}
	for (int i = 0; i < rightImgs.size(); i++)
	{
		imwrite(dirName + format("\\right%d.bmp", i), rightImgs[i]);
	}
	pcl::io::savePCDFile(dirName + "\\"+ firstTimestr +".pcd", resultCloud);
	pcl::io::savePLYFile(dirName + "\\" + firstTimestr + ".ply", resultCloud);
	std::ofstream fout(dirName + "\\log.txt");
	fout << "本文件夹创建时间为:" + firstTime + "\n";
	fout << "本文件夹存完数据时间为:" + getCurTimeStringInf() + "\n";
	fout.close();
}


int main()
{
	FileOperation saveDataFile;
	string initdirName = "Data";//保存数据的根文件夹
	Mat source = imread("test.bmp");//读取一张图片用于测试
	PointCloud<PointXYZRGB> sourceCloud;//读取一个点云
	pcl::io::loadPCDFile("cloud_cluster_0.pcd", sourceCloud);
	vector<Mat> leftImgs;
	vector<Mat> rightImgs;
	for (int i = 0; i < 10; i++)
	{
		leftImgs.push_back(source);
		rightImgs.push_back(source);
	}
	saveDataFile.saveDataInFolder(initdirName,leftImgs, rightImgs, sourceCloud);
	system("pause");
	return 0;
 }

实现的效果见下图:
按时间创建的文件夹:
在这里插入图片描述

文件夹里的具体文件情况:log.txt文件中记录了文件夹的创立时间以及保存完数据的结束时间
在这里插入图片描述

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值