vc2010+openCV1.0实现将指定目录下的所有jpg文件缩放后存放到目标文件夹

104 篇文章 0 订阅
88 篇文章 0 订阅

开发环境:winXP + vc2010 + OpenCV1.0

OpenCV1.0安装目录: D:\opensource\opencv1.0

源代码:

/*
	功能:将指定目录下的所有JPG文件进行缩放后存放到目标文件夹

	开发环境: winXP + vc2010 + openCV1.0
  
	头文件路径:
	D:\opensource\opencv1.0\cv\include
	D:\opensource\opencv1.0\cxcore\include
	D:\opensource\opencv1.0\otherlibs\highgui
	
	lib文件目录:
	D:\opensource\opencv1.0\lib
	  
	用到的lib文件: cxcore.lib cv.lib highgui.lib

*/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <io.h>
#include <direct.h>
#include <vector>
#include <cv.h>
#include <highgui.h>

using namespace std;

void checkDir(const char *dir)
{
	if(_access(dir, 0) == -1)
	{
		_mkdir(dir);
	}
}

// 获取指定目录下所有jpg文件列表
bool getImageFileList(const char *srcDir, vector<string> &fileList)
{
	_finddata_t fileDir;
    long lfDir;
	char f[100] = {0};

	sprintf(f, "%s\\*.JPG", srcDir);
    if((lfDir = _findfirst(f, &fileDir)) != -1L)
    {
        do
		{
			fileList.push_back(fileDir.name);
        }while(_findnext(lfDir, &fileDir) == 0 );
		_findclose(lfDir);

		return true;
    }

	return false;
}

/*
	功能:将源图像文件另存为目标文件,按scale比例缩放
*/
bool stretchImage(const char *srcImg, const char *destImg, double scale)
{
	IplImage *src = NULL, *dst = NULL;
    CvSize dst_cvsize;			//目标图像尺寸
	
	src = cvLoadImage(srcImg, CV_LOAD_IMAGE_UNCHANGED);
	if(!src)
	{
		printf("Load source image[%s] failed, please check!\n", srcImg);
		return false;
	}
	
    dst_cvsize.width = (int)(src->width * scale);
    dst_cvsize.height = (int)(src->height * scale);	
    dst = cvCreateImage( dst_cvsize, src->depth, src->nChannels);	//构造目标图象
//	cvResize(src, dst, CV_INTER_LINEAR);	//缩放源图像到目标图像
	cvResize(src, dst, CV_INTER_CUBIC);		//缩放源图像到目标图像
	cvSaveImage(destImg, dst);
    cvReleaseImage(&src);
    cvReleaseImage(&dst);

	return true;
}

/*
	功能:将源图像文件另存为目标文件,目标图像文件大小为destSize
*/
bool stretchImage(const char *srcImg, const char *destImg, const CvSize destSize)
{
	IplImage *src = NULL, *dst = NULL;
	
	src = cvLoadImage(srcImg, CV_LOAD_IMAGE_UNCHANGED);
	if(!src)
	{
		printf("Load source image[%s] failed, please check!\n", srcImg);
		return false;
	}
	
    dst = cvCreateImage( destSize, src->depth, src->nChannels);	//构造目标图象
//	cvResize(src, dst, CV_INTER_LINEAR);		//缩放源图像到目标图像
	cvResize(src, dst, CV_INTER_CUBIC);			//缩放源图像到目标图像
	cvSaveImage(destImg, dst);
    cvReleaseImage(&src);
    cvReleaseImage(&dst);
	
	return true;
}

// 将指定目录下的*.JPG文件压缩后,存放到目标文件夹
bool stretchImages(const char *srcDir, const char *destDir)
{
	vector<string> fileList;

	getImageFileList(srcDir, fileList);
	if(fileList.size() > 0)
	{
		const double scale = 0.25;
		char srcFile[255], destFile[255];

		checkDir(destDir);
		for(vector<string>::iterator it = fileList.begin(); it != fileList.end(); it++)
		{
			sprintf(srcFile, "%s\\%s", srcDir, it->c_str());
			sprintf(destFile, "%s\\%s", destDir, it->c_str());
			printf("Stretch Image [%s] -> [%s]\n", srcFile, destFile);
			stretchImage(srcFile, destFile, scale);
		}
		return true;
	}
	else
	{
		puts("There is no image can be stretched.");
		return false;
	}
}

int main(int argc, char* argv[])
{
	if(argc < 3)
	{
		printf("Usage: %s <srcDir> <destDir>\n", argv[0]);
		return -1;
	}
	const char *srcDir = argv[1];
	const char *destDir = argv[2];

	printf("srcDir=[%s], destDir=[%s]\n", srcDir, destDir);
	stretchImages(srcDir, destDir);

    return 0;
}

/*
	注:以上的代码除了用到一个c++的vector<string>,其他的都是C的东西,
		所以要改成纯C的也应该不难!
*/



运行结果:

D:\program\vc2010\cv1>cv1 .
Usage: cv1 <srcDir> <destDir>

D:\program\vc2010\cv1>cv1 D:\profile\Desktop\sp D:\profile\Desktop\sp\out
srcDir=[D:\profile\Desktop\sp], destDir=[D:\profile\Desktop\sp\out]
Stretch Image [D:\profile\Desktop\sp\IMG_0335.JPG] -> [D:\profile\Desktop\sp\out\IMG_0335.JPG]
Stretch Image [D:\profile\Desktop\sp\IMG_0336.JPG] -> [D:\profile\Desktop\sp\out\IMG_0336.JPG]
Stretch Image [D:\profile\Desktop\sp\IMG_0337.JPG] -> [D:\profile\Desktop\sp\out\IMG_0337.JPG]


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值