opencv:bmp和opencv图片格式的转换

转帖自:http://blog.ednchina.com/opencv2008/205865/message.aspx

 

OPENCV论坛:
http://www.opencv.org.cn/index.php/BMP%E4%B8%8EIplImage%E7%9B%B8%E4%BA%92%E8%BD%AC%E6%8D%A2
一个博客:
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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值