OpenCv中 类String所定义对象的字符截取(得到文件名)

OpenCv中 类String所定义对象的字符截取(得到文件名)


最近在做有关图像的毕业设计,需要导入不同的图片进行处理,然后对处理过后的图片进行保存。之前一直是手动改路径特别麻烦,于是就找了一下相关的处理函数与特殊类,如下:

glob函数:

void cv::glob ( String pattern, std::vector< String > & result, bool recursive = false )

其中:
1、String pattern 是包含众多图片文件的文件夹路径,数据类型是cv::String,不要与std::string弄混;
2、 std::vector< String > & result 则是得到的图片文件集,保存在容器vector中;

第三个参数用不到,那么这个函数的作用就是得到文件夹pattern中的众多文件名,并全部保存到result中

String类

这里还要用到opencv中的String类,这是一个与字符操作有关的类,处理字符时还挺方便的,那么这里用到的是该类的一个重载构造函数,如下:

String& operator=(const char* s);

通过该函数就可以实现从字符数组到String类对象的转化。

问题说明

之前比较头疼的是要把处理后的图片保存到新的文件当中,那么文件名肯定要与原来的有所区别,而上边的glob()函数得到的文件集是文件的全路径,如下图:

这样不好对文件名直接操作,所以要进行截取,仅把文件名截取出来,如下:
在这里插入图片描述
那么,在这个基础上编辑好要保存的文件名,如下:
这样
这样就能实现处理后需要保存结果文件名了。具体实现还是看代码吧。

C++代码

//截取得到文件名
String Getfilename(String &Orgfolder, String &Orgfilenames)
{
	char a[20];//保存字符
	int i = 0;
	int n = Orgfilenames.size() - Orgfolder.size();//文件名长度
	for ( i; i < 16; i++)
	{
		a[i] = Orgfilenames[Orgfolder.size() + i];
	}
	a[i] = '\0';//结束标志
	String filename = a;//构造String类型数据
	return filename;
}

int main()
{
	String folder = "E:\\train\\train"; //图片所在文件夹
	String filename;					//结果保存路径
	vector<String> filenames;			//当前文件夹下所有的文件名
	
	glob(folder, filenames);//遍历folder路径中的所有文件并保存至filename中

	for (size_t i = 0; i < 3; ++i)
	{
		filename= folder + "-result"+ Getfilename(folder, filenames[i]);

		cout <<i+1<<"、"<< "原始文件路径:" << endl;
		cout << filenames[i] << endl;
		cout << "截取文件名:" << endl;
		cout << Getfilename(folder, filenames[i]) << endl;
		cout << "保存文件路径:" << endl;
		cout << filename <<endl;
		cout << "\n";
	}
}

像程序中可以直接对字符相加减,得益于String类的重载函数。
程序结果如下:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值