1. 程式人生 > >批量更改圖片大小程式

批量更改圖片大小程式

假設我們現在有目標資料夾A,A中包含40個資料夾s1,s2...s40,每個資料夾下包含10張圖1,2,3...10。圖片大小任意。

我們的目標是在不改變整個圖片資料格式的前提下,批量更改圖片大小,最後得到的結果是,輸出B資料夾,B中包含40個資料夾s1,s2...s40,每個資料夾下包含10張圖1,2,3...10,圖片大小為我們所需要的大小(這裡我使用256X256)。

具體實現藉助opencv中的resize函式,具體用法自行百度,引數呼叫CV_INTER_LINEAR(雙線性插值),放縮效果還不錯。

貼程式碼=。=

// Resize_32x32.cpp : 定義控制檯應用程式的入口點。
//**********************************************
*           批量更改圖片大小
*           Win8.1+VS2015+Opencv 2.4.8
*           King_HAW
*           2016/12/10
***********************************************/

#include "stdafx.h"
#include <opencv2/opencv.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
#include <string>
#include <direct.h>
using namespace cv;
using namespace std;


int main()
{
	int j = 1;
	int k;
	int i;
	for (k = 1; k <= 40; k++)
	{
		for (i = 1; i <= 10; i++)
		{
			
			char imageName[100];
			char imageSave[100];
			char FileName[100];
			sprintf_s(imageName, "E:\\深度學習\\face_data\\orl_faces_png\\s%d\\%d.png", k, i);
			sprintf_s(imageSave, "E:\\ORL_FACE\\s%d\\%d.png", k, j);
			sprintf_s(FileName,  "E:\\ORL_FACE\\s%d", k);
			_mkdir(FileName);
			Mat src_img = imread(imageName);//讀入圖片資料
			Mat dst_img1;
			resize(src_img, dst_img1, Size(256, 256), 0, 0, CV_INTER_LINEAR);	// 雙線性插值
			imwrite(imageSave, dst_img1);
			waitKey(0);
			++j;
		}
		j = 1;
	}
}

路徑為字元陣列,不要直接用字串。

如果你的圖片資料大於兩層的話請按照資料層數套for迴圈。

有時間也可以試試CV_INTER_CUBIC(立方插值),應該會有所差別,選擇你認為較好的那個。