`

【转】OpenCV中IplImage 与 Gdiplus 中Bitmap之间的相互转换

    博客分类:
  • C++
UP 
阅读更多

// pIplImage 需要外部释放 Mosesyuan
 void CGeneral::BitmapToIplImage(Bitmap* pBitmap, IplImage* &pIplImg)
{
    if (!pBitmap)
    {
        return;
    }
    if(pIplImg)
    {
        cvReleaseImage(&pIplImg);
        pIplImg = NULL;
    }
    BitmapData bmpData;
    Rect rect(0,0,pBitmap->GetWidth(),pBitmap->GetHeight());
    pBitmap->LockBits(&rect, ImageLockModeRead, PixelFormat24bppRGB, &bmpData);
    IplImage* tempImg = cvCreateImage(cvSize(pBitmap->GetWidth(), pBitmap->GetHeight()), IPL_DEPTH_8U, 3);
    BYTE* temp = (bmpData.Stride>0)?((BYTE*)bmpData.Scan0):((BYTE*)bmpData.Scan0+bmpData.Stride*(bmpData.Height-1));
    memcpy(tempImg->imageData, temp, abs(bmpData.Stride)*bmpData.Height);
    pBitmap->UnlockBits(&bmpData);
    pIplImg = tempImg;
//判断Top-Down or Bottom-Up

    if (bmpData.Stride<0)       

        cvFlip(pIplImg, pIplImg);            
}
OpenCV中 IplImage 转 Gdiplus::Bitmap

// pBitmap 同样需要外部释放!!

void CGeneral::IplImageToBitmap(IplImage* pIplImg, Bitmap* &pBitmap)
{
    if(!pIplImg)
        return;       

    BITMAPINFOHEADER bmih;
    memset(&bmih, 0, sizeof(BITMAPINFOHEADER));
    bmih.biSize = sizeof(BITMAPINFOHEADER);
    bmih.biWidth = pIplImg->width;
    bmih.biHeight = pIplImg->height;
    bmih.biPlanes = 1;
    bmih.biBitCount = pIplImg->depth*pIplImg->nChannels;
    bmih.biSizeImage = pIplImg->imageSize;

    BYTE* pData=new BYTE[bmih.biSizeImage];
    memcpy(pData, pIplImg->imageDataOrigin, pIplImg->imageSize);

    if (pBitmap)
    {
        delete pBitmap;
        pBitmap = NULL;
    }
    pBitmap = Gdiplus::Bitmap::FromBITMAPINFO((BITMAPINFO*)&bmih, pData);

}
 
分享到:
评论

相关推荐

    OpenCV中IplImage与BMP转换

    opencv中的iplimage格式图像与一般unsigned char*型的bmp图像转换,同时也解决了坐标的问题

    opencv中Mat、CvMat、IplImage、IplImage*之间转换程序

    在OpenCV库中,处理图像数据时,有几种不同的数据结构可供选择,包括`Mat`、`CvMat`和`IplImage`。这些数据结构各有特点,适应不同的应用场景和编程需求。在实际开发中,有时需要在它们之间进行转换以实现功能的兼容...

    IplImage 与BufferedImage互相转换

    public static BufferedImage iplToBufImgData(IplImage ipl,BufferedImage image ) public static IplImage BufImgToIplData(IplImage ipl,BufferedImage bi)

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

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

    IplImage和CBitmap转换

    这两种转换方法在处理图像时非常实用,例如在使用OpenCV进行图像处理后,可能需要在MFC应用中显示图像,这时就需要将处理后的`IplImage`转换为`CBitmap`。反之,如果从MFC获取的图像需要进行复杂的图像处理操作,...

    利用OpenCV中对图像数据进行64F和8U转换的方式

    ### OpenCV中图像数据64F与8U类型的转换及应用 #### 一、引言 在计算机视觉领域,OpenCV(开源计算机视觉库)是一个非常重要的工具包,被广泛应用于图像处理、视频分析以及模式识别等多个方面。由于不同的算法需求...

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

    ### 在C++Builder 10.2中使用FMX或VCL控件显示OpenCV的IplImage #### 概述 本篇文章旨在探讨如何在C++Builder 10.2环境中利用FMX(FireMonkey)或VCL(Visual Component Library)控件来显示来自OpenCV库中的`...

    OpenCV一个通用的图像格式转为IplImage格式的代码实现

    总的来说,这段代码展示了如何使用FreeImage库读取通用图像,并将其转换为OpenCV中常用的IplImage格式,为后续的图像处理操作奠定了基础。在实际项目中,可以根据需求对其进行定制和优化,以满足更复杂的应用场景。

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

    在计算机视觉领域,OpenCV和Halcon是两个...总的来说,熟练掌握OpenCV和Halcon的`Mat`与`HObject`互转,能极大地提升在计算机视觉和机器视觉项目中的工作效率,使我们可以灵活地利用这两个库的特性,解决各种复杂问题。

    OPENCV下针对IplImage实现图像增强处理

    为了实现这些功能,通常需要先将图像数据读入IplImage,然后应用相应的处理函数,最后可能还需要将处理后的IplImage转换回常见的图像格式,如numpy数组(在Python中)或Mat对象(在OpenCV的C++接口中)。 总之,...

    opencv数据之间的转换

    OpenCV 提供了多种数据类型之间的转换方法,例如 Mat -&gt; IplImage、CvMat -&gt; Mat、IplImage -&gt; Mat 等。这些转换方法可以根据实际情况选择是否复制数据。 OpenCV 的数据类型之间的转换方法可以根据实际情况选择,...

    QT和Opencv图像格式转换_ qtopencv图片数组相互转化,opencv格式转换mono8

    本篇将详细介绍如何在QT和OpenCV之间进行QImage与Mat对象的转换,以及OpenCV中的图像格式转换,特别是 mono8 格式。 首先,我们要理解QImage和Mat对象的差异。QImage是QT库中的图像表示方式,它支持多种颜色模式,...

    opencv中mat与jpeg相互转换及显示代码

    在OpenCV中,我们可以通过特定的函数来实现`Mat`与JPEG格式之间的转换。 1. **`Mat`转JPEG** 要将`Mat`对象转换为JPEG格式的内存数据,我们可以使用`imencode()`函数。这个函数接受一个编码格式的字符串(如".jpg...

    android-openCV中无法将Bitmap转换为Mat.pdf

    在Android开发中,OpenCV库...总之,Android OpenCV中Bitmap转换为Mat的问题主要与Bitmap的加载方式和OpenCV的兼容性有关。通过理解这两种数据结构以及它们之间的转换机制,开发者可以采取适当措施避免或解决此类问题。

    opencv中的IplImage

    由于OpenCV主要针对的是计算机视觉方面的处理,因此在函数库中,最重要的结构体是IplImage结构。IplImage结构来源于Intel的另外一个函数库Intel Image Processing Library (IPL),该函数库主要是针对图像处理。...

    CBitmap,HBITMAP,BITMAP的关系与转换

    本文将详细介绍`CBitmap`、`HBITMAP`以及`BITMAP`之间的关系及其相互转换的方法。 #### CBitmap `CBitmap`是MFC(Microsoft Foundation Classes)中的一个类,用于封装位图对象。`CBitmap`对象可以用来加载、创建...

    C#中bitmap、stream、byte类型转换实例

    在处理图像时,我们可能会遇到需要在不同的数据类型之间转换的情况,比如从Bitmap到Stream,再到byte数组,最后再还原回Bitmap。这样的转换在上传图片、存储图片数据或在网络中传输时非常常见。本篇文章将详细介绍...

    DIB与IplImage图像格式的转换

    DIB与IplImage之间的转换是图像处理领域中常见的需求,通过合理的数据管理和算法设计,可以有效地实现这两种格式的互换。掌握这一技能对于开发者来说,不仅能够提高图像处理的灵活性,还能优化应用程序的性能和用户...

    OPENCV 内存数据转换

    在 OpenCV 中,将 JPEG 数据转换为 IplImage 是一个非常重要的步骤,这里我们将讨论如何将 JPEG 数据转换为 IplImage,并介绍 IplImage 的基本组成部分和使用方法。 IplImage 的基本组成部分 IplImage 是 OpenCV 中...

    OpenCV将GIF转为IplImage的解决方法

    本文介绍了如何使用FreeImage库将GIF格式的图像转换为OpenCV中IplImage格式的过程。通过这种方式,我们可以轻松地在OpenCV项目中处理GIF格式的图像。虽然现在的OpenCV版本已经不再推荐使用IplImage,但在某些特定...

Global site tag (gtag.js) - Google Analytics