OpenCV to use in memory buffers or file pointers

前端 未结 6 736
悲&欢浪女
悲&欢浪女 2020-12-02 21:25

The two functions in openCV cvLoadImage and cvSaveImage accept file path\'s as arguments.

For example, when saving a image it\'s cvSaveImage(\"/tmp/output.j

6条回答
  •  孤城傲影
    2020-12-02 21:41

    I'm assuming you're working in linux. From libjpeg.doc:

    The rough outline of a JPEG compression operation is:
    Allocate and initialize a JPEG compression object
    Specify the destination for the compressed data (eg, a file)
    Set parameters for compression, including image size & colorspace

    jpeg_start_compress(...);
    while (scan lines remain to be written)
    jpeg_write_scanlines(...);

    jpeg_finish_compress(...);
    Release the JPEG compression object

    The real trick for doing what you want to do is providing a custom "data destination (or source) manager" which is defined in jpeglib.h:

    struct jpeg_destination_mgr {
      JOCTET * next_output_byte;    /* => next byte to write in buffer */
      size_t free_in_buffer;        /* # of byte spaces remaining in buffer */
    
      JMETHOD(void, init_destination, (j_compress_ptr cinfo));
      JMETHOD(boolean, empty_output_buffer, (j_compress_ptr cinfo));
      JMETHOD(void, term_destination, (j_compress_ptr cinfo));
    };
    

    Basically set that up so your source and/or destination are the memory buffers you want, and you should be good to go.

    As an aside, this post could be a lot better but the libjpeg62 documentation is, quite frankly, superb. Just apt-get libjpeg62-dev and read libjpeg.doc and look at example.c. If you run into problems and can't get something to work, just post again and I'm sure someone will be able to help.

提交回复
热议问题