`
zjlinkpro
  • 浏览: 51424 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Bitmap与IplImage之间的转换

 
阅读更多

在MFC编程中,用OpenCV来处理图像时,可能会进行Bitmap与IplImage之间的转换;所以在此留个记号,以免下次再用到的时候,还要去找。

 

IplImage* BitmapToIplImage(HBITMAP hBmp)
{
	BITMAP bmp;    
	
	GetObject(hBmp, sizeof(BITMAP), &bmp);
	int depth     = (bmp.bmBitsPixel == 1) ? IPL_DEPTH_1U : IPL_DEPTH_8U;
	int nChannels = (bmp.bmBitsPixel == 1) ? 1 : bmp.bmBitsPixel/8;    
	
	IplImage* img = cvCreateImage(cvSize(bmp.bmWidth,bmp.bmHeight), depth, nChannels);  
	
	BYTE *pBuffer = new BYTE[bmp.bmHeight*bmp.bmWidth*nChannels];    
	GetBitmapBits(hBmp, bmp.bmHeight*bmp.bmWidth*nChannels, pBuffer);
	memcpy(img->imageData, pBuffer, bmp.bmHeight*bmp.bmWidth*nChannels);   
	delete pBuffer;

	IplImage *dst = cvCreateImage(cvGetSize(img), img->depth,3);    
	cvCvtColor(img, dst, CV_BGRA2BGR);   
	cvReleaseImage(&img);   
	return dst;
}

 如果要从CBitmap转为IplImage,可以先将CBitmap转为BITMAP,再由BITMAP转为IplImage;

// CBitmap 转为 BITMAP
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP);
BITMAP   bmp;
bitmap.GetBitmap(&bmp);

// CBitmap与HBITMAP间的转换
// CBitmap转为HBITMAP
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP);
HBITMAP bmp = HBITMAP(bitmap);
// HBITMAP转为CBitmap
HBITMAP  hbitmap;  
CBitmap   bitmap;
bitmap.Attach(hbitmap);
 
分享到:
评论

相关推荐

    IplImage和CBitmap转换

    本文主要讨论了两种常见的图像数据结构:`IplImage` 和 `CBitmap` 之间的转换,这对于使用MFC(Microsoft Foundation Classes)库进行图像处理的开发者来说是至关重要的。 `IplImage` 是OpenCV库中定义的一种图像...

    DIB与IplImage图像格式的转换

    IplImage转DIB的过程相对复杂,首先需要将IplImage转换为Windows环境下的CBitmap对象,这一步骤主要涉及位图数据的复制和格式转换。接下来,通过调用BMPToDIB函数,将CBitmap对象转换为DIB格式的HANDLE。最后,根据...

    C++builder 10.2 (FMX或VCL)控件中显示opencv2的 IplImage图片.docx

    OpenCV与IplImage简介 - **OpenCV**(Open Source Computer Vision Library)是一个开源计算机视觉和机器学习软件库。 - **IplImage**是OpenCV早期版本中用于表示图像的基本结构。它包含图像的宽度、高度、通道数等...

    Halcon/Opencv/VC之间图像相互转换

    ### Halcon/Opencv/VC之间图像相互转换 #### 一、引言 在计算机视觉领域,不同的图像处理库有着各自的图像数据结构和处理方式。Halcon、OpenCV以及C++标准库(如Windows下的VC++)都有其特定的数据表示方式。在...

    opencv与halcon的Mat与HObject互转的完整测试程序

    2. 使用Halcon的`ImportImage`函数将IplImage转换为`HImage`,这是Halcon中表示图像的数据类型。 3. 最后,通过`DetectObjects`或`FindObjects`等函数,从`HImage`中检测出感兴趣的区域,得到`HObject`。 **从...

    让OpenCV显示在C#窗体上

    4. **显示在PictureBox中**:将IplImage转换为Bitmap,然后赋值给PictureBox的Image属性。这可以通过使用`ImageConverter`类来实现: ```csharp Bitmap bitmap = image.Bitmap; pictureBox1.Image = bitmap; ```...

    OpencvMyCamera

    HBITMAP hBitmap = CreateBitmap(iplImage->width, iplImage->height, 1, iplImage->nChannels * 8, iplImage->imageData); // ... 将hBitmap设置到picture控件 ``` 录制视频时,我们需要创建一个VideoWriter对象,...

    IStream用于图像加载与显示

    这通常涉及到将`IplImage`的数据转换为位图(`CBitmap`),再通过`CDC::DrawBitmap`或自定义绘图逻辑来显示。 在`BitmapInf.cpp`和`BitmapInf.h`文件中,可能包含了自定义的`BitmapInf`类,这个类可能扩展了`...

    mfcshowimage

    bitmap.CreateCompatibleBitmap(&dc, iplImage->width, iplImage->height); CDC memDC; memDC.CreateCompatibleDC(&dc); HBITMAP hOldBitmap = (HBITMAP)memDC.SelectObject(bitmap); cv::Mat temp(iplImage->...

    C#代码 NIVision Image To HalconImaget Hobject类型 图像格式转换.rar

    在LabVIEW中,NIVision的图像通常以某种特定的数据结构存储,例如`IplImage`或`Bitmap`。 Halcon,另一方面,是由MVTec公司开发的机器视觉软件,它包含大量的图像处理函数和模式识别算法。在Halcon中,图像被表示为...

    在内存中将bmp转JPG

    2. 图像格式之间的转换,特别是BMP到JPG。 3. 图像的缩放操作。 4. 内存中的图像处理,避免磁盘I/O。 5. MFC与OpenCV的集成。 6. 图像质量和压缩级别的控制。 7. 可能的旧式IplImage到现代Mat类型的转换。 通过理解...

    vc+opencv_在控件中显示图像

    - 为了能在Picture控件中显示,我们需要将IplImage转换为Windows的BITMAP结构。可以使用以下代码: ```cpp BITMAPINFO bmi; ZeroMemory(&bmi, sizeof(BITMAPINFO)); bmi.bmiHeader.biWidth = img->width; bmi....

    c++ BMP转JPG

    在这个场景中,我们关注的是如何在C++环境中将BMP(Bitmap)格式的图像转换为JPG(Joint Photographic Experts Group)格式。BMP是一种无损的、未压缩的图像格式,而JPG则是一种有损的、压缩的格式,更适合网络传输...

    在MFC中使用OpenCV的方法.docx

    尽管两者在像素位数、通道数、坐标原点、像素分量存放方式和对齐方式上存在差异,但大部分情况下可以相互转换。例如,OpenCV的`IplImage`结构特别适合高精度图像处理,而DIB更适合Windows图形操作,尤其是处理低位数...

    在MFC中使用Opencv

    2. 在 MFC 中使用 Opencv 需要使用 DIB(Device Independent Bitmap)实现图像显示,通过 StretchDIBits 函数将 Opencv 位图转换为 DIB 位图。 3. Opencv 中的 IplImage 结构与 DIB 位图结构有相似之处,都是描述...

    opencv在MFC中的使用.docx

    这段代码首先读取图像文件,然后将OpenCV的`Mat`对象转换为`IplImage`,以便与MFC的Picture控件兼容。接着,使用设备上下文(`CDC`)和位图对象来绘制图像。最后,确保释放所有分配的资源。 通过这种方式,你可以在...

    OpenCV mfc开发教程

    // 转换IplImage到HBITMAP HBITMAP hBitmap = CreateBitmap(image->width, image->height, 1, 24, (char *)image->imageData); CDC dc; dc.Attach(m_hWnd); // 假设m_hWnd是MFC窗口句柄 CBitmap bitmap; ...

    mfcOpencvTest基于opencv建立的mfc,打开一张图片,并能够在图片上画图

    这个对话框通常会包含一个CStatic控件,我们可以通过自定义这个控件来显示OpenCV的IplImage或cv::Mat类型的图像。我们还需要实现OnPaint事件处理函数,以便在控件上绘制图像。 在OpenCV中,我们可以使用imread函数...

    打开任意路径下的Mat类型图片

    然后,使用`AfxGetApp()->GetMainWnd()`获取主窗口句柄,创建一个CBitmap对象,并通过`CreateDIBitmap`函数创建与Mat大小匹配的设备无关位图。最后,使用`cv::cvtColor`将图像转换为RGB色彩空间,以便于显示。 ```...

Global site tag (gtag.js) - Google Analytics