RGB转jpeg的方法:先对图像进行预处理,然后DCT变换,量化,然后进行编码,huffman编码或其它编码,就可以转换成jpg了。下面主要讲解使用opencv保存jpg图像,或使用IJG库保存jpg图像,使用opencv保存jpg图像的函数如下:
CVAPI(int) cvSaveImage( const char* filename, const CvArr* image,
const int* params CV_DEFAULT(0) );
第三个参数可以设置压缩的质量
int params[3]
params[0] = CV_IMWRITE_JPEG_QUALITY;
params[1] = 85;//设置s压缩度
params[2] = 0;
把params传入就可以了。
使用IJG进行压缩的方法如下:
首先下载IJG库,下载的网站是http://www.ijg.org,然后对下载的源码进行编译,编译可以参考它的文档,我下载的为jpegsr8c,按照它的文档,只能编译出vc6.0和vs2010的版本库,我没有安装vs2010的软件,所以使用vc6.0编译出来的库,发现不能使用,原因可能是vc6.0编译的是单线程的东东,但是我使用的是多线程的东西。所以我使用vs2008重新对源码进行编译:编译方法如下:
一、建立自己的libjpeg工程
为了修改后编译方便,也为了以后在VC 环境下容易使用jpeg库,我们按以下步骤将libjpeg转换为VC环境下的工程。
1、在VC环境下重新建立一个空的static library工程,工程名为jpeg,此处注意,新建工程不要包含mfc,不要预编译头文件;
2、然后将libjpeg下的jcapimin.c jcapistd.c jccoefct.c jccolor.c jcdctmgr.c jchuff.c
jcinit.c jcmainct.c jcmarker.c jcmaster.c jcomapi.c jcparam.c
jcphuff.c jcprepct.c jcsample.c jctrans.c jdapimin.c jdapistd.c
jdatadst.c jdatasrc.c jdcoefct.c jdcolor.c jddctmgr.c jdhuff.c
jdinput.c jdmainct.c jdmarker.c jdmaster.c jdmerge.c jdphuff.c
jdpostct.c jdsample.c jdtrans.c jerror.c jfdctflt.c jfdctfst.c
jfdctint.c jidctflt.c jidctfst.c jidctint.c jidctred.c jquant1.c
jquant2.c jutils.c jmemmgr.c
jchuff.h jconfig.h jdhuff.h jdct.h jerror.h jinclude.h jmemsys.h jmorecfg.h
jpegint.h jpeglib.h jversion.h 等文件拷贝到新工程的文件夹下,并将.c文件改名为.cpp;
3、将所有的源文件及头文件添加到新建的工程中;
4、编译新工程,此时就可以生成jpeg.lib了。
编译完库后就可以使用了。
如果谁需要我编译好的库,vs2008的,给我留言,呵呵