Opencv+VS2015批量更改图片名称和图片大小

主要功能

读取文件夹中批量不同格式不同大小图片,将其转化为JPG格式,并更改为统一大小,然后保存至指定文件夹。
本程序保存的图片大小为608*608,为了保持原图的长和宽的比例,将多余的部分用黑色部分做了填充。
代码如下:

#include 
#include 
#include 
#include 
#include 
using namespace std;
using namespace cv;
int a = 1;
//更改图片大小
Mat changeImg(Mat input,Mat output)
{
	float Img_width = input.cols;
	float Img_hight = input.rows;
	float scale = Img_hight / Img_width;
	float width ;
	float hight;//设置更改后的图片的宽度和高度
	if (scale > 1)
	{
		hight = 608;
		width = 608 * (1/scale);
		resize(input, output, Size(width, hight)); //对图片进行修改
		copyMakeBorder(output, output, 0, 0, (608 - width) / 2, (608 - width) / 2,  BORDER_CONSTANT, Scalar(0, 0, 0));
	}
	else if (scale < 1)
	{
		width = 608;
		hight = 608 * scale;
		resize(input, output, Size(width, hight)); //对图片进行修改
		copyMakeBorder(output, output, (608 - hight) / 2, (608 - hight) / 2, 0, 0, BORDER_CONSTANT, Scalar(0, 0, 0));
	}
	else
	{
		width = 608;
		hight = 608;
		resize(input, output, Size(width, hight)); //对图片进行修改
	}
	
	
	return output;
}
int main()
{
	String path = "C:/Users/Desktop/image";//待处理图片文件夹地址
	String dest = "C:/Users/Desktop/样本4/";//处理后图片的保存地址
	String savedfilename;
	vector<String> filenames;
	Mat srcImg, dstImg;
	glob(path, filenames);//opencv里面用来读取指定路径下文件名的一个很好用的函数
	for (int i = 0; i < filenames.size(); i++) 
	{

		srcImg = imread(filenames[i]);
		imshow("原图", srcImg);
		dstImg=changeImg(srcImg, dstImg);
		char num[10];//定义保存图像的序号
		sprintf(num,"%d",a);//将数字a转化成num字符,路径无法直接识别整型数字
		savedfilename = dest+num+".jpg";//保存图像的路径
		cout << savedfilename << endl;
		a++;
		waitKey(100);
		imwrite(savedfilename, dstImg);//保存图像
	}
	return 0;
}

你可能感兴趣的:(opencv)