今天的任务是完成adaboost分类器中,得到XML文件。其中第一步就是讲正负样本转换为灰度图。
如何批量将正负样本的图片转为灰度图呢?
我参考了这篇文章:http://blog.csdn.net/LightP2_16/article/details/53116866
#include"stdlib.h"
#include <highgui.h>
#include "stdio.h"
#include "cv.h"
using namespace std;
int main()
{
int image_id = 0;
char filename[4936];
char filename2[4936];
IplImage *image = 0, *imageresize = 0;
sprintf(filename, "D:\Pic\smoke\%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,"D:\adboost\neg\%d.jpg", image_id);
cvSaveImage(filename2, imageresize); //将处理后的图像保存放入另一个文件夹
cvReleaseImage(&imageresize);
cvReleaseImage(&src); //释放内存
image_id++; //图片序号递增
sprintf(filename, "D:\Pic\smoke\%d.jpg", image_id);
src = cvLoadImage(filename); //加载下一幅图像
}
cout << "\n 灰度化完毕! \n";
system("PAUSE");
return(0);
}
但是始终没有生成灰度图片?
为什么呢?
试了半天,终于发现是因为sprintf(filename2,"D:\adboost\neg\%d.jpg", image_id);此处不应该为%d.jpg,而是1.jpg
然后绝对路径不对,我是放在工程目录下面来调试,成功。
#include"stdlib.h"
#include <highgui.h>
#include "stdio.h"
#include "cv.h"
using namespace std;
int main()
{
int image_id = 0;
char filename[4936];
char filename2[4936];
IplImage *image = 0, *imageresize = 0;
sprintf(filename, "smoke\\1.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, "neg\\%d.jpg", image_id);
cvSaveImage(filename2, imageresize); //将处理后的图像保存放入另一个文件夹
cvReleaseImage(&imageresize);
cvReleaseImage(&src); //释放内存
image_id++; //图片序号递增
sprintf(filename, "smoke\\%d.jpg", image_id);
src = cvLoadImage(filename); //加载下一幅图像
}
cout << "\n 灰度化完毕! \n";
system("PAUSE");
return(0);
}