123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330 |
- /*M///////////////////////////////////////////////////////////////////////////////////////
- //
- // IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
- //
- // By downloading, copying, installing or using the software you agree to this license.
- // If you do not agree to this license, do not download, install,
- // copy or use the software.
- //
- //
- // License Agreement
- // For Open Source Computer Vision Library
- //
- // Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
- // Copyright (C) 2009, Willow Garage Inc., all rights reserved.
- // Third party copyrights are property of their respective owners.
- //
- // Redistribution and use in source and binary forms, with or without modification,
- // are permitted provided that the following conditions are met:
- //
- // * Redistribution's of source code must retain the above copyright notice,
- // this list of conditions and the following disclaimer.
- //
- // * Redistribution's in binary form must reproduce the above copyright notice,
- // this list of conditions and the following disclaimer in the documentation
- // and/or other materials provided with the distribution.
- //
- // * The name of the copyright holders may not be used to endorse or promote products
- // derived from this software without specific prior written permission.
- //
- // This software is provided by the copyright holders and contributors "as is" and
- // any express or implied warranties, including, but not limited to, the implied
- // warranties of merchantability and fitness for a particular purpose are disclaimed.
- // In no event shall the Intel Corporation or contributors be liable for any direct,
- // indirect, incidental, special, exemplary, or consequential damages
- // (including, but not limited to, procurement of substitute goods or services;
- // loss of use, data, or profits; or business interruption) however caused
- // and on any theory of liability, whether in contract, strict liability,
- // or tort (including negligence or otherwise) arising in any way out of
- // the use of this software, even if advised of the possibility of such damage.
- //
- //M*/
- #ifndef OPENCV_IMGCODECS_HPP
- #define OPENCV_IMGCODECS_HPP
- #include "opencv2/core.hpp"
- /**
- @defgroup imgcodecs Image file reading and writing
- @{
- @defgroup imgcodecs_c C API
- @defgroup imgcodecs_flags Flags used for image file reading and writing
- @defgroup imgcodecs_ios iOS glue
- @defgroup imgcodecs_macosx MacOS(OSX) glue
- @}
- */
- //////////////////////////////// image codec ////////////////////////////////
- namespace cv
- {
- //! @addtogroup imgcodecs
- //! @{
- //! @addtogroup imgcodecs_flags
- //! @{
- //! Imread flags
- enum ImreadModes {
- IMREAD_UNCHANGED = -1, //!< If set, return the loaded image as is (with alpha channel, otherwise it gets cropped). Ignore EXIF orientation.
- IMREAD_GRAYSCALE = 0, //!< If set, always convert image to the single channel grayscale image (codec internal conversion).
- IMREAD_COLOR = 1, //!< If set, always convert image to the 3 channel BGR color image.
- IMREAD_ANYDEPTH = 2, //!< If set, return 16-bit/32-bit image when the input has the corresponding depth, otherwise convert it to 8-bit.
- IMREAD_ANYCOLOR = 4, //!< If set, the image is read in any possible color format.
- IMREAD_LOAD_GDAL = 8, //!< If set, use the gdal driver for loading the image.
- IMREAD_REDUCED_GRAYSCALE_2 = 16, //!< If set, always convert image to the single channel grayscale image and the image size reduced 1/2.
- IMREAD_REDUCED_COLOR_2 = 17, //!< If set, always convert image to the 3 channel BGR color image and the image size reduced 1/2.
- IMREAD_REDUCED_GRAYSCALE_4 = 32, //!< If set, always convert image to the single channel grayscale image and the image size reduced 1/4.
- IMREAD_REDUCED_COLOR_4 = 33, //!< If set, always convert image to the 3 channel BGR color image and the image size reduced 1/4.
- IMREAD_REDUCED_GRAYSCALE_8 = 64, //!< If set, always convert image to the single channel grayscale image and the image size reduced 1/8.
- IMREAD_REDUCED_COLOR_8 = 65, //!< If set, always convert image to the 3 channel BGR color image and the image size reduced 1/8.
- IMREAD_IGNORE_ORIENTATION = 128 //!< If set, do not rotate the image according to EXIF's orientation flag.
- };
- //! Imwrite flags
- enum ImwriteFlags {
- IMWRITE_JPEG_QUALITY = 1, //!< For JPEG, it can be a quality from 0 to 100 (the higher is the better). Default value is 95.
- IMWRITE_JPEG_PROGRESSIVE = 2, //!< Enable JPEG features, 0 or 1, default is False.
- IMWRITE_JPEG_OPTIMIZE = 3, //!< Enable JPEG features, 0 or 1, default is False.
- IMWRITE_JPEG_RST_INTERVAL = 4, //!< JPEG restart interval, 0 - 65535, default is 0 - no restart.
- IMWRITE_JPEG_LUMA_QUALITY = 5, //!< Separate luma quality level, 0 - 100, default is 0 - don't use.
- IMWRITE_JPEG_CHROMA_QUALITY = 6, //!< Separate chroma quality level, 0 - 100, default is 0 - don't use.
- IMWRITE_PNG_COMPRESSION = 16, //!< For PNG, it can be the compression level from 0 to 9. A higher value means a smaller size and longer compression time. If specified, strategy is changed to IMWRITE_PNG_STRATEGY_DEFAULT (Z_DEFAULT_STRATEGY). Default value is 1 (best speed setting).
- IMWRITE_PNG_STRATEGY = 17, //!< One of cv::ImwritePNGFlags, default is IMWRITE_PNG_STRATEGY_RLE.
- IMWRITE_PNG_BILEVEL = 18, //!< Binary level PNG, 0 or 1, default is 0.
- IMWRITE_PXM_BINARY = 32, //!< For PPM, PGM, or PBM, it can be a binary format flag, 0 or 1. Default value is 1.
- IMWRITE_EXR_TYPE = (3 << 4) + 0, /* 48 */ //!< override EXR storage type (FLOAT (FP32) is default)
- IMWRITE_EXR_COMPRESSION = (3 << 4) + 1, /* 49 */ //!< override EXR compression type (ZIP_COMPRESSION = 3 is default)
- IMWRITE_WEBP_QUALITY = 64, //!< For WEBP, it can be a quality from 1 to 100 (the higher is the better). By default (without any parameter) and for quality above 100 the lossless compression is used.
- IMWRITE_PAM_TUPLETYPE = 128,//!< For PAM, sets the TUPLETYPE field to the corresponding string value that is defined for the format
- IMWRITE_TIFF_RESUNIT = 256,//!< For TIFF, use to specify which DPI resolution unit to set; see libtiff documentation for valid values
- IMWRITE_TIFF_XDPI = 257,//!< For TIFF, use to specify the X direction DPI
- IMWRITE_TIFF_YDPI = 258,//!< For TIFF, use to specify the Y direction DPI
- IMWRITE_TIFF_COMPRESSION = 259,//!< For TIFF, use to specify the image compression scheme. See libtiff for integer constants corresponding to compression formats. Note, for images whose depth is CV_32F, only libtiff's SGILOG compression scheme is used. For other supported depths, the compression scheme can be specified by this flag; LZW compression is the default.
- IMWRITE_JPEG2000_COMPRESSION_X1000 = 272 //!< For JPEG2000, use to specify the target compression rate (multiplied by 1000). The value can be from 0 to 1000. Default is 1000.
- };
- enum ImwriteEXRTypeFlags {
- /*IMWRITE_EXR_TYPE_UNIT = 0, //!< not supported */
- IMWRITE_EXR_TYPE_HALF = 1, //!< store as HALF (FP16)
- IMWRITE_EXR_TYPE_FLOAT = 2 //!< store as FP32 (default)
- };
- enum ImwriteEXRCompressionFlags {
- IMWRITE_EXR_COMPRESSION_NO = 0, //!< no compression
- IMWRITE_EXR_COMPRESSION_RLE = 1, //!< run length encoding
- IMWRITE_EXR_COMPRESSION_ZIPS = 2, //!< zlib compression, one scan line at a time
- IMWRITE_EXR_COMPRESSION_ZIP = 3, //!< zlib compression, in blocks of 16 scan lines
- IMWRITE_EXR_COMPRESSION_PIZ = 4, //!< piz-based wavelet compression
- IMWRITE_EXR_COMPRESSION_PXR24 = 5, //!< lossy 24-bit float compression
- IMWRITE_EXR_COMPRESSION_B44 = 6, //!< lossy 4-by-4 pixel block compression, fixed compression rate
- IMWRITE_EXR_COMPRESSION_B44A = 7, //!< lossy 4-by-4 pixel block compression, flat fields are compressed more
- IMWRITE_EXR_COMPRESSION_DWAA = 8, //!< lossy DCT based compression, in blocks of 32 scanlines. More efficient for partial buffer access. Supported since OpenEXR 2.2.0.
- IMWRITE_EXR_COMPRESSION_DWAB = 9, //!< lossy DCT based compression, in blocks of 256 scanlines. More efficient space wise and faster to decode full frames than DWAA_COMPRESSION. Supported since OpenEXR 2.2.0.
- };
- //! Imwrite PNG specific flags used to tune the compression algorithm.
- /** These flags will be modify the way of PNG image compression and will be passed to the underlying zlib processing stage.
- - The effect of IMWRITE_PNG_STRATEGY_FILTERED is to force more Huffman coding and less string matching; it is somewhat intermediate between IMWRITE_PNG_STRATEGY_DEFAULT and IMWRITE_PNG_STRATEGY_HUFFMAN_ONLY.
- - IMWRITE_PNG_STRATEGY_RLE is designed to be almost as fast as IMWRITE_PNG_STRATEGY_HUFFMAN_ONLY, but give better compression for PNG image data.
- - The strategy parameter only affects the compression ratio but not the correctness of the compressed output even if it is not set appropriately.
- - IMWRITE_PNG_STRATEGY_FIXED prevents the use of dynamic Huffman codes, allowing for a simpler decoder for special applications.
- */
- enum ImwritePNGFlags {
- IMWRITE_PNG_STRATEGY_DEFAULT = 0, //!< Use this value for normal data.
- IMWRITE_PNG_STRATEGY_FILTERED = 1, //!< Use this value for data produced by a filter (or predictor).Filtered data consists mostly of small values with a somewhat random distribution. In this case, the compression algorithm is tuned to compress them better.
- IMWRITE_PNG_STRATEGY_HUFFMAN_ONLY = 2, //!< Use this value to force Huffman encoding only (no string match).
- IMWRITE_PNG_STRATEGY_RLE = 3, //!< Use this value to limit match distances to one (run-length encoding).
- IMWRITE_PNG_STRATEGY_FIXED = 4 //!< Using this value prevents the use of dynamic Huffman codes, allowing for a simpler decoder for special applications.
- };
- //! Imwrite PAM specific tupletype flags used to define the 'TUPLETYPE' field of a PAM file.
- enum ImwritePAMFlags {
- IMWRITE_PAM_FORMAT_NULL = 0,
- IMWRITE_PAM_FORMAT_BLACKANDWHITE = 1,
- IMWRITE_PAM_FORMAT_GRAYSCALE = 2,
- IMWRITE_PAM_FORMAT_GRAYSCALE_ALPHA = 3,
- IMWRITE_PAM_FORMAT_RGB = 4,
- IMWRITE_PAM_FORMAT_RGB_ALPHA = 5
- };
- //! @} imgcodecs_flags
- /** @brief Loads an image from a file.
- @anchor imread
- The function imread loads an image from the specified file and returns it. If the image cannot be
- read (because of missing file, improper permissions, unsupported or invalid format), the function
- returns an empty matrix ( Mat::data==NULL ).
- Currently, the following file formats are supported:
- - Windows bitmaps - \*.bmp, \*.dib (always supported)
- - JPEG files - \*.jpeg, \*.jpg, \*.jpe (see the *Note* section)
- - JPEG 2000 files - \*.jp2 (see the *Note* section)
- - Portable Network Graphics - \*.png (see the *Note* section)
- - WebP - \*.webp (see the *Note* section)
- - Portable image format - \*.pbm, \*.pgm, \*.ppm \*.pxm, \*.pnm (always supported)
- - PFM files - \*.pfm (see the *Note* section)
- - Sun rasters - \*.sr, \*.ras (always supported)
- - TIFF files - \*.tiff, \*.tif (see the *Note* section)
- - OpenEXR Image files - \*.exr (see the *Note* section)
- - Radiance HDR - \*.hdr, \*.pic (always supported)
- - Raster and Vector geospatial data supported by GDAL (see the *Note* section)
- @note
- - The function determines the type of an image by the content, not by the file extension.
- - In the case of color images, the decoded images will have the channels stored in **B G R** order.
- - When using IMREAD_GRAYSCALE, the codec's internal grayscale conversion will be used, if available.
- Results may differ to the output of cvtColor()
- - On Microsoft Windows\* OS and MacOSX\*, the codecs shipped with an OpenCV image (libjpeg,
- libpng, libtiff, and libjasper) are used by default. So, OpenCV can always read JPEGs, PNGs,
- and TIFFs. On MacOSX, there is also an option to use native MacOSX image readers. But beware
- that currently these native image loaders give images with different pixel values because of
- the color management embedded into MacOSX.
- - On Linux\*, BSD flavors and other Unix-like open-source operating systems, OpenCV looks for
- codecs supplied with an OS image. Install the relevant packages (do not forget the development
- files, for example, "libjpeg-dev", in Debian\* and Ubuntu\*) to get the codec support or turn
- on the OPENCV_BUILD_3RDPARTY_LIBS flag in CMake.
- - In the case you set *WITH_GDAL* flag to true in CMake and @ref IMREAD_LOAD_GDAL to load the image,
- then the [GDAL](http://www.gdal.org) driver will be used in order to decode the image, supporting
- the following formats: [Raster](http://www.gdal.org/formats_list.html),
- [Vector](http://www.gdal.org/ogr_formats.html).
- - If EXIF information is embedded in the image file, the EXIF orientation will be taken into account
- and thus the image will be rotated accordingly except if the flags @ref IMREAD_IGNORE_ORIENTATION
- or @ref IMREAD_UNCHANGED are passed.
- - Use the IMREAD_UNCHANGED flag to keep the floating point values from PFM image.
- - By default number of pixels must be less than 2^30. Limit can be set using system
- variable OPENCV_IO_MAX_IMAGE_PIXELS
- @param filename Name of file to be loaded.
- @param flags Flag that can take values of cv::ImreadModes
- */
- CV_EXPORTS_W Mat imread( const String& filename, int flags = IMREAD_COLOR );
- /** @brief Loads a multi-page image from a file.
- The function imreadmulti loads a multi-page image from the specified file into a vector of Mat objects.
- @param filename Name of file to be loaded.
- @param mats A vector of Mat objects holding each page.
- @param flags Flag that can take values of cv::ImreadModes, default with cv::IMREAD_ANYCOLOR.
- @sa cv::imread
- */
- CV_EXPORTS_W bool imreadmulti(const String& filename, CV_OUT std::vector<Mat>& mats, int flags = IMREAD_ANYCOLOR);
- /** @brief Loads a of images of a multi-page image from a file.
- The function imreadmulti loads a specified range from a multi-page image from the specified file into a vector of Mat objects.
- @param filename Name of file to be loaded.
- @param mats A vector of Mat objects holding each page.
- @param start Start index of the image to load
- @param count Count number of images to load
- @param flags Flag that can take values of cv::ImreadModes, default with cv::IMREAD_ANYCOLOR.
- @sa cv::imread
- */
- CV_EXPORTS_W bool imreadmulti(const String& filename, CV_OUT std::vector<Mat>& mats, int start, int count, int flags = IMREAD_ANYCOLOR);
- /** @brief Returns the number of images inside the give file
- The function imcount will return the number of pages in a multi-page image, or 1 for single-page images
- @param filename Name of file to be loaded.
- @param flags Flag that can take values of cv::ImreadModes, default with cv::IMREAD_ANYCOLOR.
- */
- CV_EXPORTS_W size_t imcount(const String& filename, int flags = IMREAD_ANYCOLOR);
- /** @brief Saves an image to a specified file.
- The function imwrite saves the image to the specified file. The image format is chosen based on the
- filename extension (see cv::imread for the list of extensions). In general, only 8-bit
- single-channel or 3-channel (with 'BGR' channel order) images
- can be saved using this function, with these exceptions:
- - 16-bit unsigned (CV_16U) images can be saved in the case of PNG, JPEG 2000, and TIFF formats
- - 32-bit float (CV_32F) images can be saved in PFM, TIFF, OpenEXR, and Radiance HDR formats;
- 3-channel (CV_32FC3) TIFF images will be saved using the LogLuv high dynamic range encoding
- (4 bytes per pixel)
- - PNG images with an alpha channel can be saved using this function. To do this, create
- 8-bit (or 16-bit) 4-channel image BGRA, where the alpha channel goes last. Fully transparent pixels
- should have alpha set to 0, fully opaque pixels should have alpha set to 255/65535 (see the code sample below).
- - Multiple images (vector of Mat) can be saved in TIFF format (see the code sample below).
- If the image format is not supported, the image will be converted to 8-bit unsigned (CV_8U) and saved that way.
- If the format, depth or channel order is different, use
- Mat::convertTo and cv::cvtColor to convert it before saving. Or, use the universal FileStorage I/O
- functions to save the image to XML or YAML format.
- The sample below shows how to create a BGRA image, how to set custom compression parameters and save it to a PNG file.
- It also demonstrates how to save multiple images in a TIFF file:
- @include snippets/imgcodecs_imwrite.cpp
- @param filename Name of the file.
- @param img (Mat or vector of Mat) Image or Images to be saved.
- @param params Format-specific parameters encoded as pairs (paramId_1, paramValue_1, paramId_2, paramValue_2, ... .) see cv::ImwriteFlags
- */
- CV_EXPORTS_W bool imwrite( const String& filename, InputArray img,
- const std::vector<int>& params = std::vector<int>());
- /// @overload multi-image overload for bindings
- CV_WRAP static inline
- bool imwritemulti(const String& filename, InputArrayOfArrays img,
- const std::vector<int>& params = std::vector<int>())
- {
- return imwrite(filename, img, params);
- }
- /** @brief Reads an image from a buffer in memory.
- The function imdecode reads an image from the specified buffer in the memory. If the buffer is too short or
- contains invalid data, the function returns an empty matrix ( Mat::data==NULL ).
- See cv::imread for the list of supported formats and flags description.
- @note In the case of color images, the decoded images will have the channels stored in **B G R** order.
- @param buf Input array or vector of bytes.
- @param flags The same flags as in cv::imread, see cv::ImreadModes.
- */
- CV_EXPORTS_W Mat imdecode( InputArray buf, int flags );
- /** @overload
- @param buf
- @param flags
- @param dst The optional output placeholder for the decoded matrix. It can save the image
- reallocations when the function is called repeatedly for images of the same size.
- */
- CV_EXPORTS Mat imdecode( InputArray buf, int flags, Mat* dst);
- /** @brief Encodes an image into a memory buffer.
- The function imencode compresses the image and stores it in the memory buffer that is resized to fit the
- result. See cv::imwrite for the list of supported formats and flags description.
- @param ext File extension that defines the output format.
- @param img Image to be written.
- @param buf Output buffer resized to fit the compressed image.
- @param params Format-specific parameters. See cv::imwrite and cv::ImwriteFlags.
- */
- CV_EXPORTS_W bool imencode( const String& ext, InputArray img,
- CV_OUT std::vector<uchar>& buf,
- const std::vector<int>& params = std::vector<int>());
- /** @brief Returns true if the specified image can be decoded by OpenCV
- @param filename File name of the image
- */
- CV_EXPORTS_W bool haveImageReader( const String& filename );
- /** @brief Returns true if an image with the specified filename can be encoded by OpenCV
- @param filename File name of the image
- */
- CV_EXPORTS_W bool haveImageWriter( const String& filename );
- //! @} imgcodecs
- } // cv
- #endif //OPENCV_IMGCODECS_HPP
|