2017-01-28 22 views
1

私はlibjpegを使ってV4L2バッファをファイルに保存しています。結果として得られる画像はすばらしく見えます。今私はJPEG(範囲1-100)の品質を設定しようとしています。私はドキュメントを参照しました:https://www4.cs.fau.de/Services/Doc/graphics/doc/jpeg/libjpeg.htmlLibJPEGで画像の画質を調整する方法

私はそこにjpeg_set_quality関数があることがわかります。品質パラメータが1の場合でも常に最高品質のように見えます。

品質パラメータを有効にするにはどうすればよいですか?ありがとう。 JPEG保存機能をマイ

は、ここに示されています:

static void save_jpeg(CamInfo *cam, struct v4l2_buffer *dqBuf) 
{ 
    static int inited = 0; 
    static int fileno = 0; 
    int row_stride; 
    JSAMPROW row_pointer[1]; 
    char *image_buf; 
    FILE * outfile; 
    char filename[32]; 

    if(!inited) 
    { 
     memset(&cam->cinfo, 0, sizeof(cam->cinfo)); 
     memset(&cam->jerr, 0, sizeof(cam->jerr)); 

     cam->cinfo.err = jpeg_std_error(&cam->jerr); 
     jpeg_create_compress(&cam->cinfo); 

     cam->cinfo.image_width = WIDTH; //image width and height, in pixels 
     cam->cinfo.image_height = HEIGHT; 
     cam->cinfo.input_components = 3; // must be 3 
     cam->cinfo.in_color_space = JCS_YCbCr; 
     printf("Setting JPEG quality: %d\n",quality); 
     jpeg_set_quality(&cam->cinfo, quality, (boolean)0); 
     jpeg_set_defaults(&cam->cinfo); 

     inited = 1; 
    } 

    if(continuous_stream) 
     fileno = 0; /* same filename each time */ 

    printf("About to write JPEG image\n"); 

    sprintf(filename, "/tmp/nginx/vl.jpeg"); 

    if ((outfile = fopen(filename, "wb")) == NULL) 
    { 
     fprintf(stderr, "can't open %s\n", filename); 
     exit(1); 
    } 
    jpeg_stdio_dest(&cam->cinfo, outfile); 

    jpeg_start_compress(&cam->cinfo, TRUE); 

    row_stride = WIDTH * 3; 

    image_buf = planar_to_interleave(mCam.frames[dqBuf->index]); 

    while (cam->cinfo.next_scanline < cam->cinfo.image_height) 
    { 
     row_pointer[0] = (JSAMPROW)(&image_buf[cam->cinfo.next_scanline * row_stride]); 
     (void) jpeg_write_scanlines(&cam->cinfo, row_pointer, 1); 
    } 

    jpeg_finish_compress(&cam->cinfo); 
    fclose(outfile); 
} 

答えて

2

jpeg_set_defaults()jpeg_set_quality()後のリセット機能の順序は、この問題を解決するために呼び出す75スワップの品質を呼び出します。

From the source:

GLOBAL(void) 
jpeg_set_defaults (j_compress_ptr cinfo) 
{ 
    … 
    /* Set up two quantization tables using default quality of 75 */ 
    jpeg_set_quality(cinfo, 75, TRUE); 
関連する問題