在WINDOWS下经常要用到在MFC应用窗口中显示IPLIMAGE,因此BMP与IPLIMAGE的相互转换就会经常使用。本文给出两个转换函数,供参考!
/** 从BMP图像文件数据流中生成IPLIMAGE对象
*/
IplImage* GetIplFromBmp(BYTE* pBmp, DWORD size)
{
BYTE* p = pBmp;
BITMAPFILEHEADER fheader;
memcpy(&fheader, p, sizeof(BITMAPFILEHEADER));
BITMAPINFOHEADER bmphdr;
p += sizeof(BITMAPFILEHEADER);
memcpy(&bmphdr, p, sizeof(BITMAPINFOHEADER));
int w = bmphdr.biWidth;
int h = bmphdr.biHeight;
p = pBmp + fheader.bfOffBits;
//reverse(p, w, h);
IplImage* pIpl = cvCreateImage(cvSize(w,h),8,3);
memcpy(pIpl->imageData, p, w * h * 3 *sizeof(char));
return pIpl;
}
/** 从IPLIMAGE对象中生成BMP的图像文件流
*/
bool GetBmpFromIpl(IplImage* pIpl, BYTE* &pBmp, DWORD& size)
{
BITMAPFILEHEADER bfh = {0};
DWORD dwImageSize = 0;
DWORD dwBytesRead = 0;
int w = pIpl->width;
int l = ((w * 24 +31) & ~31) /8;
int h = pIpl->height;
dwImageSize = l * h;
bfh.bfType = (WORD)'M' << 8 | 'B'; //定义文件类
bfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER); //定义文件头大小
bfh.bfSize = bfh.bfOffBits + dwImageSize; //文件大小
BITMAPINFOHEADER bih = {0};
bih.biSize = sizeof(BITMAPINFOHEADER);
bih.biWidth = pIpl->width;
bih.biHeight = pIpl->height;
bih.biPlanes = 1;
bih.biBitCount = 24;
bih.biCompression = BI_RGB;
bih.biSizeImage = 0;
bih.biXPelsPerMeter = 0;
bih.biYPelsPerMeter = 0;
bih.biClrUsed = 0;
bih.biClrImportant = 0;
size = bfh.bfSize;
pBmp = new BYTE[bfh.bfSize+1];
memset(pBmp, 0, bfh.bfSize + 1);
memcpy(pBmp, &bfh, sizeof(BITMAPFILEHEADER));
memcpy(pBmp+sizeof(BITMAPFILEHEADER), &bih, sizeof(BITMAPINFOHEADER));
BYTE* p = pBmp+sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
memcpy(p, (BYTE*)pIpl->imageData, dwImageSize);
return true;
}
分享到:
相关推荐
本篇将详细讲解如何使用OpenCV将.jpg格式的图像无损地转换为.bmp格式。 首先,让我们了解这两种图像格式的基本特性。JPEG(.jpg)是一种广泛使用的有损压缩格式,适用于照片和其他连续色调的图像,因为它能有效地...
本资源提供了一个使用C++实现的图像格式转换源代码,它可以帮助开发者理解和实现不同图像格式之间的转换,比如从JPEG转换为PNG,或者从BMP转换为GIF等。 C++是一种强大的编程语言,具有高效、灵活和丰富的库支持,...
本篇将详细介绍如何在QT和OpenCV之间进行QImage与Mat对象的转换,以及OpenCV中的图像格式转换,特别是 mono8 格式。 首先,我们要理解QImage和Mat对象的差异。QImage是QT库中的图像表示方式,它支持多种颜色模式,...
在本文中,我们将深入探讨如何使用OpenCV库打开BMP图像。OpenCV(开源计算机视觉库)是一个功能强大的工具,广泛应用于图像处理和计算机视觉领域。BMP是一种常见的位图图像格式,它不包含任何压缩,因此对于快速读取...
### Halcon/Opencv/VC之间图像相互转换 #### 一、引言 在计算机视觉领域,不同的图像处理库有着各自的图像数据结构和处理方式。Halcon、OpenCV以及C++标准库(如Windows下的VC++)都有其特定的数据表示方式。在...
总之,"基于VS2015+opencv320的图像清晰度算法源代码"项目提供了一个实用的示例,可以帮助开发者深入理解图像清晰度的计算方法,并掌握如何在C++环境中使用OpenCV进行图像处理。通过这个项目,你可以提升自己的图像...
在图像处理领域,RAW和BMP是两种常见的图像文件格式,每种格式都有其特定的特点和用途。本篇文章将深入探讨这两种格式,并介绍如何通过编程实现它们之间的转换,特别是使用Visual Studio 2010环境。 首先,RAW格式...
以上就是关于如何在OpenCV中进行`Mat`与JPEG格式转换以及在MFC界面中显示图像的关键知识点。在实际项目中,根据需求可能会涉及到错误处理、性能优化、用户交互等方面的内容。理解这些基础操作对于开发图像处理或...
OpenCV中imwrite函数源代码详解 OpenCV是一个功能强大且广泛应用的计算机视觉库,它提供了许多有用的函数来处理图像和视频。imwrite函数是OpenCV中一个重要的函数,用于将图像写入到文件中。在本文中,我们将详细地...
opencv C++图像风格迁移 网络模型文件 及源代码下载 opencv C++图像风格迁移 网络模型文件 及源代码下载 opencv C++图像风格迁移 网络模型文件 及源代码下载 opencv C++图像风格迁移 网络模型文件 及源代码下载 ...
【标题】基于Qt和OpenCV图像格式处理工具源代码 这个项目主要涉及的是利用Qt框架和OpenCV库来开发一个图像格式处理工具。Qt是一个跨平台的C++图形用户界面应用程序开发框架,广泛用于创建桌面、移动和嵌入式系统的...
通过上述代码示例,我们了解了如何使用C++和OpenCV将RAW格式的图像数据转换为BMP格式。这个过程涉及到文件读写、图像矩阵的创建和填充、图像显示以及图像保存等多个环节。掌握了这种方法后,可以在实际项目中灵活地...
在这个特定的案例中,我们讨论的是一个源代码实现,该实现已经通过了Visual Studio 2010 SP1的编译,能够支持批量转换bmp、png和jpg这三种常见的图像格式。下面我们将深入探讨这些知识点: 1. **图片格式**: - **...
总的来说,这段代码展示了如何使用FreeImage库读取通用图像,并将其转换为OpenCV中常用的IplImage格式,为后续的图像处理操作奠定了基础。在实际项目中,可以根据需求对其进行定制和优化,以满足更复杂的应用场景。
这个压缩包包含的“opencv图像处理源代码”是为初学者准备的,旨在帮助他们理解和实践OpenCV的基本功能。 OpenCV的核心在于它的C++接口,但同时也提供了Python、Java等多种语言的接口,使得不同背景的开发者都能...
在本文中,我们将深入探讨如何使用Visual Studio 2015、Qt 5.8框架以及OpenCV 2.3.14库来编写一个将RAW格式图像转换为BMP格式的小程序。RAW图像格式是许多高级数码相机捕捉的原始数据格式,它包含了传感器捕获的未经...
"OpenCV图像处理编程实例+源代码 - 副本" 是一个资源包,提供了关于如何使用OpenCV进行图像处理的实际教程和源代码示例。在这个包中,你将找到"fireplace7fp"这样的案例,它可能是针对特定图像或场景的处理示例。 ...
1. **图像的格式转换**:在数字图像处理中,不同格式的图像文件(如BMP、JPEG、PNG等)有不同的存储方式和压缩算法。转换图像格式是常见的需求,例如从位图转换为JPEG以减少文件大小。Delphi提供了如GDI+、VCL等库...
1. 图像读取与显示:通过`imread`函数可以读取各种格式的图像文件,`imshow`函数则用于在窗口中显示图像。 2. 图像处理:包括图像的滤波(如高斯滤波、中值滤波)、色彩空间转换(如BGR到灰度或HSV的转换)、直方图...
在水印系统中,主要涉及的OpenCV函数可能包括图像的读取(imread)、写入(imwrite)、显示(imshow)以及各种图像处理操作,如滤波、色彩空间转换等。 在水印的嵌入过程中,关键步骤包括选择合适的水印信息、确定...