1. 程式人生 > >彩色影象批量轉換為灰度影象

彩色影象批量轉換為灰度影象

       最近在做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