您的位置:首页 > 编程语言 > C语言/C++

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  rgb 转换 c语言 libjpeg