由于在OpenCV1.0中只提供了从硬盘打开JPEG图像进行解码,有些时候如果JPEG的图像数据是从内存载入的,就无法使用这些曾经很方便高效的接口。为了实现这个目的,我们通过修改OpenCV1.0源码,在其源码包中添加函数,实现把jpeg数据从内存复制到IplImage结构中,这为我们进行相应处理会方便很多,实现过程如下:
修改源码包目录下的otherlibs/highgui目录下的如下源码文件:
1、highgui.h,在其中添加函数的声明:
CVAPI(IplImage*) cvJpeg2Ipl(char *jpegData, int jpegSize);
2、grfmt_jpeg.cpp,在其中添加函数的实现:
1)、添加头文件:
#include "jpeglib.h"
2)、添加源代码:
void mem_init_source(j_decompress_ptr cinfo)
{
// cinfo->src->bytes_in_buffer = g_buf_len;
// cinfo->src->next_input_byte = (unsigned char*)g_buf;
}
boolean mem_fill_input_buffer(j_decompress_ptr cinfo)
{
return true;
}
void mem_skip_input_data(j_decompress_ptr cinfo, long num_bytes)
{
cinfo->src->bytes_in_buffer -= num_bytes;
cinfo-&g