转帖自:http://blog.ednchina.com/opencv2008/205865/message.aspx
OPENCV论坛:http://www.opencv.org.cn/index.php/BMP与IplImage相互转换一个博客:http://blog.csdn.net/hunnish/archive/2008/09/18/2947595.aspx//********************************************************//将IplImage文件转换为BMP文件//IplImage *pmg opencv里面的文件格式//BITMAPINFO *pbmpinfo 得到的bmp文件图像信息头//BYTE **pbmpdata 得到的bmp图像文件数据//********************************************************BOOL Ipl2BMP(IplImage *Iplmg,BITMAPINFO **pbmpinfo,BYTE **pbmpdata){ BYTE *p=new BYTE[2048]; *pbmpinfo=(BITMAPINFO*)p; (*pbmpinfo)->bmiHeader.biSize =sizeof(BITMAPINFOHEADER); (*pbmpinfo)->bmiHeader.biBitCount =Iplmg->nChannels*8; (*pbmpinfo)->bmiHeader.biClrUsed =0; (*pbmpinfo)->bmiHeader.biCompression =BI_RGB; (*pbmpinfo)->bmiHeader.biHeight =Iplmg->height; (*pbmpinfo)->bmiHeader.biWidth =Iplmg->width; (*pbmpinfo)->bmiHeader.biPlanes =1; (*pbmpinfo)->bmiHeader.biSizeImage =0; (*pbmpinfo)->bmiHeader.biXPelsPerMeter=0; (*pbmpinfo)->bmiHeader.biYPelsPerMeter=0; int ImgSize=(((*pbmpinfo)->bmiHeader.biWidth * (*pbmpinfo)->bmiHeader.biBitCount + 31 )/32) * 4 * (*pbmpinfo)->bmiHeader.biHeight; (*pbmpdata)=new BYTE[ImgSize+1]; memcpy(*pbmpdata,Iplmg->imageData,ImgSize); return TRUE;}//******************************************************//bmp文件转换IPLImage文件//******************************************************IplImage *BMP2Ipl(BITMAPINFO *pbmpinfo,BYTE *pbmpdata){ int channal=(pbmpinfo->bmiHeader.biBitCount == 1) ? 1:(pbmpinfo->bmiHeader.biBitCount/8); //仅限于二值图像和灰度图像 //int depth =(pbmpinfo->bmiHeader.biBitCount == 1) ? IPL_DEPTH_1U : IPL_DEPTH_8U; int depth = IPL_DEPTH_8U; int width=pbmpinfo->bmiHeader.biWidth; int heigh=pbmpinfo->bmiHeader.biHeight; IplImage *pmg; pmg=cvCreateImageHeader(cvSize(width,heigh),depth,channal); pmg->imageData=(char*)malloc(pmg->imageSize); pmg->origin=1; //cvSetData(); memcpy(pmg->imageData,pbmpdata,pmg->imageSize); return pmg;}