将DIB转换为IplImage(核心代码)

来源:互联网 发布:c51和c语言的区别 编辑:程序博客网 时间:2024/05/23 00:10

在以取得DIB的情况下,可以将DIB转化为IplImage,核心代码如下:byte * p = new byte[bmp.bmWidthBytes * bmp.bmHeight];//申请内存保存位图数据 //得到图像数据放到p数组中 GetDIBits(memDC.m_hDC, (HBITMAP) memBitmap.m_hObject, 0, Height, p, (LPBITMAPINFO) &bih, DIB_RGB_COLORS);//获取位图数据//创建IplImage的图像头信息,注意通道数要和原DIB通道数一致这里是4通道。 m_SnapImage = cvCreateImageHeader( cvSize( bih.biWidth, bih.biHeight) , IPL_DEPTH_8U, 4 ); //将m_SnapImage->imageData的指针指向p数据区的首地址 cvSetData( m_SnapImage, p, bmp.bmWidthBytes); cvFlip( m_SnapImage, m_SnapImage, 0 );//翻转图像数组IplImage * tpImg=m_SnapImage; pImg = cvCreateImage( cvGetSize(tpImg), IPL_DEPTH_8U, 3); //将4通道转换成3通道,如果不转换显示将出错。 cvCvtColor(tpImg,pImg,CV_BGR2RGB); cvCvtColor(pImg,pImg,CV_RGB2BGR);