RGB转jpg使用libjpeg库实现
2015-10-03 12:34
1031 查看
近期在做一个在智能相机产品,关于人脸识别方面的,需要输出一张jpeg图片识别结果,需要YUV转RGB,RGB转JPG,其实libjpeg也可以直接以YUV输入源输出JPG图片的,涉及到通用性和不同编码器输出的YUV格式不一致,下面贴代码,从网上找了一些参考,调试过后没保存作者的url,抱歉,下面贴代码。
// // rgb2jpeg.h // libjpegTest // // Created by mawei on 15/10/2. // Copyright (c) 2015年 mawei. All rights reserved. // #ifndef __libjpegTest__rgb2jpeg__ #define __libjpegTest__rgb2jpeg__ #include <stdio.h> int jpeginit(int image_width,int image_height,int quality); int rgb2jpeg(char * filename, unsigned char* rgbData); int jpeguninit(); #endif /* defined(__libjpegTest__rgb2jpeg__) */
// // rgb2jpeg.c // libjpegTest // // Created by mawei on 15/10/2. // Copyright (c) 2015年 mawei. All rights reserved. // #include <stdio.h> #include "rgb2jpeg.h" #include "jpeglib.h" //定义一个压缩对象,这个对象用于处理主要的功能 struct jpeg_compress_struct jpeg; //用于错误信息 struct jpeg_error_mgr jerr; int jpeginit(int image_width,int image_height,int quality) { //错误输出在绑定 jpeg.err = jpeg_std_error(&jerr); //初始化压缩对象 jpeg_create_compress(&jpeg); //压缩参数设置。具体请到网上找相应的文档吧,参数很多,这里只设置主要的。 //我设置为一个 24 位的 image_width X image_height大小的RGB图片 jpeg.image_width = image_width; jpeg.image_height = image_height; jpeg.input_components = 3; jpeg.in_color_space = JCS_RGB; //参数设置为默认的 jpeg_set_defaults(&jpeg); //还可以设置些其他参数: //// 指定亮度及色度质量 //jpeg.q_scale_factor[0] = jpeg_quality_scaling(100); //jpeg.q_scale_factor[1] = jpeg_quality_scaling(100); //// 图像采样率,默认为2 * 2 //jpeg.comp_info[0].v_samp_factor = 1; //jpeg.comp_info[0].h_samp_factor = 1; //// 设定编码jpeg压缩质量 jpeg_set_quality(&jpeg, quality, TRUE); return 0; } int rgb2jpeg(char * filename, unsigned char* rgbData) { //定义压缩后的输出,这里输出到一个文件! FILE* pFile = fopen( filename,"wb" ); if( !pFile ) return 0; //绑定输出 jpeg_stdio_dest(&jpeg, pFile); //开始压缩。执行这一行数据后,无法再设置参数了! jpeg_start_compress(&jpeg, TRUE); JSAMPROW row_pointer[1]; //从上到下,设置图片中每一行的像素值 for( int i=0;i<jpeg.image_height;i++ ) { row_pointer[0] = rgbData+i*jpeg.image_width*3; jpeg_write_scanlines( &jpeg,row_pointer,1 ); } //结束压缩 jpeg_finish_compress(&jpeg); fclose( pFile ); pFile = NULL; return 0; } int jpeguninit() { //清空对象 jpeg_destroy_compress(&jpeg); return 0; }
相关文章推荐
- Lua和C语言的交互详解
- C#实现将千分位字符串转换成数字的方法
- oracle SCN跟TIMESTAMP之间转换
- C#将制定目录文件名转换成大写的方法
- Access转成SQL数据库的方法
- C#实现Stream与byte[]之间的转换实例教程
- C#中结构体和字节数组转换实现
- C#进制之间的相互转换详解
- 自己动手把ACCESS转换到SQLSERVER的方法
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中计算正弦的相关函数总结
- 使用C语言详解霍夫曼树数据结构