// 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格式图像与一般unsigned char*型的bmp图像转换,同时也解决了坐标的问题
在OpenCV库中,处理图像数据时,有几种不同的数据结构可供选择,包括`Mat`、`CvMat`和`IplImage`。这些数据结构各有特点,适应不同的应用场景和编程需求。在实际开发中,有时需要在它们之间进行转换以实现功能的兼容...
public static BufferedImage iplToBufImgData(IplImage ipl,BufferedImage image ) public static IplImage BufImgToIplData(IplImage ipl,BufferedImage bi)
### Halcon/Opencv/VC之间图像相互转换 #### 一、引言 在计算机视觉领域,不同的图像处理库有着各自的图像数据结构和处理方式。Halcon、OpenCV以及C++标准库(如Windows下的VC++)都有其特定的数据表示方式。在...
这两种转换方法在处理图像时非常实用,例如在使用OpenCV进行图像处理后,可能需要在MFC应用中显示图像,这时就需要将处理后的`IplImage`转换为`CBitmap`。反之,如果从MFC获取的图像需要进行复杂的图像处理操作,...
### OpenCV中图像数据64F与8U类型的转换及应用 #### 一、引言 在计算机视觉领域,OpenCV(开源计算机视觉库)是一个非常重要的工具包,被广泛应用于图像处理、视频分析以及模式识别等多个方面。由于不同的算法需求...
### 在C++Builder 10.2中使用FMX或VCL控件显示OpenCV的IplImage #### 概述 本篇文章旨在探讨如何在C++Builder 10.2环境中利用FMX(FireMonkey)或VCL(Visual Component Library)控件来显示来自OpenCV库中的`...
总的来说,这段代码展示了如何使用FreeImage库读取通用图像,并将其转换为OpenCV中常用的IplImage格式,为后续的图像处理操作奠定了基础。在实际项目中,可以根据需求对其进行定制和优化,以满足更复杂的应用场景。
在计算机视觉领域,OpenCV和Halcon是两个...总的来说,熟练掌握OpenCV和Halcon的`Mat`与`HObject`互转,能极大地提升在计算机视觉和机器视觉项目中的工作效率,使我们可以灵活地利用这两个库的特性,解决各种复杂问题。
为了实现这些功能,通常需要先将图像数据读入IplImage,然后应用相应的处理函数,最后可能还需要将处理后的IplImage转换回常见的图像格式,如numpy数组(在Python中)或Mat对象(在OpenCV的C++接口中)。 总之,...
OpenCV 提供了多种数据类型之间的转换方法,例如 Mat -> IplImage、CvMat -> Mat、IplImage -> Mat 等。这些转换方法可以根据实际情况选择是否复制数据。 OpenCV 的数据类型之间的转换方法可以根据实际情况选择,...
本篇将详细介绍如何在QT和OpenCV之间进行QImage与Mat对象的转换,以及OpenCV中的图像格式转换,特别是 mono8 格式。 首先,我们要理解QImage和Mat对象的差异。QImage是QT库中的图像表示方式,它支持多种颜色模式,...
在OpenCV中,我们可以通过特定的函数来实现`Mat`与JPEG格式之间的转换。 1. **`Mat`转JPEG** 要将`Mat`对象转换为JPEG格式的内存数据,我们可以使用`imencode()`函数。这个函数接受一个编码格式的字符串(如".jpg...
在Android开发中,OpenCV库...总之,Android OpenCV中Bitmap转换为Mat的问题主要与Bitmap的加载方式和OpenCV的兼容性有关。通过理解这两种数据结构以及它们之间的转换机制,开发者可以采取适当措施避免或解决此类问题。
由于OpenCV主要针对的是计算机视觉方面的处理,因此在函数库中,最重要的结构体是IplImage结构。IplImage结构来源于Intel的另外一个函数库Intel Image Processing Library (IPL),该函数库主要是针对图像处理。...
本文将详细介绍`CBitmap`、`HBITMAP`以及`BITMAP`之间的关系及其相互转换的方法。 #### CBitmap `CBitmap`是MFC(Microsoft Foundation Classes)中的一个类,用于封装位图对象。`CBitmap`对象可以用来加载、创建...
在处理图像时,我们可能会遇到需要在不同的数据类型之间转换的情况,比如从Bitmap到Stream,再到byte数组,最后再还原回Bitmap。这样的转换在上传图片、存储图片数据或在网络中传输时非常常见。本篇文章将详细介绍...
DIB与IplImage之间的转换是图像处理领域中常见的需求,通过合理的数据管理和算法设计,可以有效地实现这两种格式的互换。掌握这一技能对于开发者来说,不仅能够提高图像处理的灵活性,还能优化应用程序的性能和用户...
在 OpenCV 中,将 JPEG 数据转换为 IplImage 是一个非常重要的步骤,这里我们将讨论如何将 JPEG 数据转换为 IplImage,并介绍 IplImage 的基本组成部分和使用方法。 IplImage 的基本组成部分 IplImage 是 OpenCV 中...
本文介绍了如何使用FreeImage库将GIF格式的图像转换为OpenCV中IplImage格式的过程。通过这种方式,我们可以轻松地在OpenCV项目中处理GIF格式的图像。虽然现在的OpenCV版本已经不再推荐使用IplImage,但在某些特定...