具体方法如下:
首先,#include "highgui.h"
#include "cv.h"
其中highgui.h文件里面有我们将要使用的cvLoadImage()函数声明
第二步
声明
BYTE * lpBmpData; \\保存图像文件像素数据
LONG ImageWidth; \\图像宽度
LONG ImageHeight; \\图像高度
PBITMAPINFO info; \\文件信息头
第三步
声明两个引用
IplImage * temp;
IplImage * pImg;
利用temp=cvLoadImage(filename,CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR)读取jpeg文件
这个函数也支持便携式网络图片 - PNG;
便携式图像格式 - PBM,PGM,PPM;
第四步
因为opencv读取的图像数据在windows下面显示可能出现倒置的情况
所以我们利用cvConvertImage(temp,pImg,CV_CVTIMG_FLIP);
将图像反转回来
第五步
现在可以将数据填写进前面声明的变量里了
lpBmpData=pImg->imageData; \\指向排列的图像数据image,而imageDataOrigin; /* 指针指向一个不同的图像数据结构(不是必须排列的),是为了纠正图像内存分配准备的 */
ImageWidth=pImg->width;
ImageHeight=pImg->height;
info->bmiHeader.biPlanes=1;
info->bmiHeader.biWidth=ImageWidth;
info->bmiHeader.biHeight=ImageHeight;
info->bmiHeader.biPlanes=1;
info->bmiHeader.biCompression = BI_RGB;
info->bmiHeader.biBitCount=(int)pImg->depth*pImg->nChannels;
info->bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
值得注意的是info结构必须填写,因为我们将用到StretchDIBits这个函数
第六步
我们用StretchDIBits(pDC->GetSafeHdc(), 0,0,ImageWidth,ImageHeight,
0,0,ImageWidth,ImageHeight, lpBmpData,info, DIB_RGB_COLORS,SRCCOPY);
显示数据
好了,得到的lpBmpData就可以拿来进行数字图像处理了,简单吧。