OpenCV 2之批量打开文件夹下文件

在用OpenCV做计算机视觉时,常常需要批量打开文件夹下的文件。网上也有许多高大上的操作方式,但对本人来说,大多都晦涩难懂(水平有限吧)。我一直认为最好的代码,就是用最浅显易懂的语句实现困难的任务。扯远了。

  我写的程序,缺点是要事先判断文件夹下的文件数。

  假设有这样的文件夹目录:E:\butterfly\,要打开该文件夹下所有的图片,应该怎么做?按照一般的思路进行操作,现将所有的文件名输入,再一次打开。这里就要同一命名所有文件(全选文件,重命名按确认即可)。

值得特别注意的是,在C++中目录要写成,如"E:\\butterfly\\butterfly  (3).jpg"。'\\'是为了区别约定操作字符(\t,\n,ec.)和目录字符。


#include "stdafx.h"
#include
#include
#include
#include
#include
#include
#include

using namespace std;
using namespace cv;
const string name("E:\\butterfly\\butterfly  (");
const string tem = ").jpg";
const int num = 10;//文件数

void getFilePath(const string&filename, const string temstr, int num, vector& files)
{
	stringstream ss;//将int型转换成string型
	for (int k = 1; k <= num; k++)
	{
		string s;
		ss << k;
		ss >> s;
		files.push_back(filename + s + temstr);//压入容器
		ss.clear();
	}
}
int main()
{
	system("color 2F");
	vectorfiles;
	getFilePath(name, tem, num, files);
	vector::iterator iter= files.begin();

	const string winName("butterfly");
	vector images;
	stringstream ss;
	string str;
	int j = 0;
	while (iter != files.end())
	{
		cout << "\t文件名[ " << ++j << " ] :" << *iter << endl;
		Mat temImg=imread(*iter);
		if (temImg.empty())
		{
			cout << "can not open this image !" << endl;
			return false;
		}
		images.push_back(temImg);//将图片保存入容器
		++iter;
	}
	if (images.size() == 0)
	{
		cout << "we get no image !" << endl;
		return false;
	}
	else
	{
		cout << "\n\n\tthe number is " << images.size() << endl;
	}

	int i = 0;
	vector::iterator it = images.begin();
	while (it!= images.end())
	{
		i++;
		ss << i;
		ss >> str;
		imshow(winName + str, *it);//依次显示
		ss.clear();
		++it;
	}
		waitKey(0);
		return 0;
}





你可能感兴趣的:(OpenCV,opencv,计算机视觉,c++,图片)