最近在做haar分类器的训练,要用到大量的正负样本,在网上找了一些,有一份样本集除了它是彩色图像外还算满意,为了后期训练时间能够缩短一点,决定把它们都转换成灰度图像!
说干就干,一幅图像的转换很简单了,但是批量转换就稍微复杂了一丢丢,在网上找了下没有现成的代码(可能这个东西太简单大家懒得写出来。。。),于是找了个类似的,参考理解修改了一下,就OK了,达到了预期的要求,搞定!
#include"stdlib.h"
#include <highgui.h>
#include "stdio.h"
#include "cv.h"
using namespace std;
int main()
{
int image_id = 0;
char filename[10926];
char filename2[10926];
IplImage *image=0,*imageresize=0;
sprintf(filename , "C:\\Documents and Settings\\Administrator\\桌面\\face\\face\\negdata\\%d.jpg" , image_id );
IplImage* src = cvLoadImage(filename);
cout<<"\n 开始灰度化! \n";
while(src)
{
imageresize=cvCreateImage(cvGetSize(src),IPL_DEPTH_8U,1); //创建头并分配数据
cvCvtColor(src, imageresize, CV_RGB2GRAY);
sprintf(filename2 , "C:\\Documents and Settings\\Administrator\\桌面\\face\\face\\neg\\%d.jpg" , image_id );
cvSaveImage(filename2, imageresize); //将处理后的图像保存放入另一个文件夹
cvReleaseImage(&imageresize);
cvReleaseImage(&src); //释放内存
image_id++; //图片序号递增
sprintf(filename , "C:\\Documents and Settings\\Administrator\\桌面\\face\\face\\negdata\\%d.jpg" , image_id );
src= cvLoadImage(filename); //加载下一幅图像
}
cout<<"\n 灰度化完毕! \n";
system("PAUSE");
return(0);
}
我negdata中总共有10000+的图片(命名方式是0.jpg , 1.jpg ,............10000.jpg ,....用到了ACDSee的批量重命名),大概用了一分多钟吧,全部转换完,保存在了另一个文件夹neg中。
参考代码的网址http://blog.csdn.net/kobesdu/article/details/8952412