2012-04-30 22:33:52 +08:00
/*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*/
2016-09-30 17:46:29 +08:00
# ifndef OPENCV_IMGCODECS_HPP
# define OPENCV_IMGCODECS_HPP
2012-04-30 22:33:52 +08:00
2014-07-04 22:48:15 +08:00
# include "opencv2/core.hpp"
2010-05-12 01:44:00 +08:00
2014-11-19 16:29:31 +08:00
/**
@ defgroup imgcodecs Image file reading and writing
@ {
2020-10-28 09:51:12 +08:00
@ defgroup imgcodecs_flags Flags used for image file reading and writing
2014-11-19 16:29:31 +08:00
@ defgroup imgcodecs_ios iOS glue
2020-10-15 00:58:06 +08:00
@ defgroup imgcodecs_macosx MacOS ( OSX ) glue
2014-11-19 16:29:31 +08:00
@ }
*/
2014-07-04 22:48:15 +08:00
//////////////////////////////// image codec ////////////////////////////////
2012-04-30 22:33:52 +08:00
namespace cv
{
2014-11-19 16:29:31 +08:00
//! @addtogroup imgcodecs
//! @{
2020-10-28 09:51:12 +08:00
//! @addtogroup imgcodecs_flags
//! @{
2015-05-04 19:24:25 +08:00
//! Imread flags
enum ImreadModes {
2020-02-07 06:49:14 +08:00
IMREAD_UNCHANGED = - 1 , //!< If set, return the loaded image as is (with alpha channel, otherwise it gets cropped). Ignore EXIF orientation.
2018-09-30 21:22:26 +08:00
IMREAD_GRAYSCALE = 0 , //!< If set, always convert image to the single channel grayscale image (codec internal conversion).
2024-07-03 15:58:25 +08:00
IMREAD_COLOR_BGR = 1 , //!< If set, always convert image to the 3 channel BGR color image.
IMREAD_COLOR = 1 , //!< Same as IMREAD_COLOR_BGR.
2015-09-25 03:51:11 +08:00
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.
2015-10-01 22:25:18 +08:00
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.
2016-11-10 01:09:22 +08:00
IMREAD_REDUCED_COLOR_8 = 65 , //!< If set, always convert image to the 3 channel BGR color image and the image size reduced 1/8.
2024-07-03 15:58:25 +08:00
IMREAD_IGNORE_ORIENTATION = 128 , //!< If set, do not rotate the image according to EXIF's orientation flag.
IMREAD_COLOR_RGB = 256 , //!< If set, always convert image to the 3 channel RGB color image.
2014-07-04 22:48:15 +08:00
} ;
2012-04-30 22:33:52 +08:00
2015-05-04 19:24:25 +08:00
//! 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.
2024-05-27 22:33:43 +08:00
IMWRITE_JPEG_LUMA_QUALITY = 5 , //!< Separate luma quality level, 0 - 100, default is -1 - don't use. If JPEG_LIB_VERSION < 70, Not supported.
IMWRITE_JPEG_CHROMA_QUALITY = 6 , //!< Separate chroma quality level, 0 - 100, default is -1 - don't use. If JPEG_LIB_VERSION < 70, Not supported.
2022-06-21 02:42:50 +08:00
IMWRITE_JPEG_SAMPLING_FACTOR = 7 , //!< For JPEG, set sampling factor. See cv::ImwriteJPEGSamplingFactorParams.
2016-12-26 14:44:43 +08:00
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).
2017-05-12 14:01:38 +08:00
IMWRITE_PNG_STRATEGY = 17 , //!< One of cv::ImwritePNGFlags, default is IMWRITE_PNG_STRATEGY_RLE.
2015-05-04 19:24:25 +08:00
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.
2023-07-11 18:08:58 +08:00
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_EXR_DWA_COMPRESSION_LEVEL = ( 3 < < 4 ) + 2 /* 50 */ , //!< override EXR DWA compression level (45 is default)
2016-07-14 21:27:36 +08:00
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.
2023-07-11 18:08:58 +08:00
IMWRITE_HDR_COMPRESSION = ( 5 < < 4 ) + 0 /* 80 */ , //!< specify HDR compression
2016-07-14 21:27:36 +08:00
IMWRITE_PAM_TUPLETYPE = 128 , //!< For PAM, sets the TUPLETYPE field to the corresponding string value that is defined for the format
2022-01-31 20:53:45 +08:00
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
2024-04-03 19:30:11 +08:00
IMWRITE_TIFF_COMPRESSION = 259 , //!< For TIFF, use to specify the image compression scheme. See cv::ImwriteTiffCompressionFlags. 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.
2024-03-23 09:16:30 +08:00
IMWRITE_TIFF_ROWSPERSTRIP = 278 , //!< For TIFF, use to specify the number of rows per strip.
2024-04-03 19:30:11 +08:00
IMWRITE_TIFF_PREDICTOR = 317 , //!< For TIFF, use to specify predictor. See cv::ImwriteTiffPredictorFlags.
2023-06-09 20:39:10 +08:00
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.
IMWRITE_AVIF_QUALITY = 512 , //!< For AVIF, it can be a quality between 0 and 100 (the higher the better). Default is 95.
IMWRITE_AVIF_DEPTH = 513 , //!< For AVIF, it can be 8, 10 or 12. If >8, it is stored/read as CV_32F. Default is 8.
IMWRITE_AVIF_SPEED = 514 //!< For AVIF, it is between 0 (slowest) and (fastest). Default is 9.
2014-07-04 22:48:15 +08:00
} ;
2012-04-30 22:33:52 +08:00
2022-06-21 02:42:50 +08:00
enum ImwriteJPEGSamplingFactorParams {
IMWRITE_JPEG_SAMPLING_FACTOR_411 = 0x411111 , //!< 4x1,1x1,1x1
IMWRITE_JPEG_SAMPLING_FACTOR_420 = 0x221111 , //!< 2x2,1x1,1x1(Default)
IMWRITE_JPEG_SAMPLING_FACTOR_422 = 0x211111 , //!< 2x1,1x1,1x1
IMWRITE_JPEG_SAMPLING_FACTOR_440 = 0x121111 , //!< 1x2,1x1,1x1
IMWRITE_JPEG_SAMPLING_FACTOR_444 = 0x111111 //!< 1x1,1x1,1x1(No subsampling)
} ;
2024-04-03 19:30:11 +08:00
enum ImwriteTiffCompressionFlags {
IMWRITE_TIFF_COMPRESSION_NONE = 1 , //!< dump mode
IMWRITE_TIFF_COMPRESSION_CCITTRLE = 2 , //!< CCITT modified Huffman RLE
IMWRITE_TIFF_COMPRESSION_CCITTFAX3 = 3 , //!< CCITT Group 3 fax encoding
IMWRITE_TIFF_COMPRESSION_CCITT_T4 = 3 , //!< CCITT T.4 (TIFF 6 name)
IMWRITE_TIFF_COMPRESSION_CCITTFAX4 = 4 , //!< CCITT Group 4 fax encoding
IMWRITE_TIFF_COMPRESSION_CCITT_T6 = 4 , //!< CCITT T.6 (TIFF 6 name)
IMWRITE_TIFF_COMPRESSION_LZW = 5 , //!< Lempel-Ziv & Welch
IMWRITE_TIFF_COMPRESSION_OJPEG = 6 , //!< !6.0 JPEG
IMWRITE_TIFF_COMPRESSION_JPEG = 7 , //!< %JPEG DCT compression
IMWRITE_TIFF_COMPRESSION_T85 = 9 , //!< !TIFF/FX T.85 JBIG compression
IMWRITE_TIFF_COMPRESSION_T43 = 10 , //!< !TIFF/FX T.43 colour by layered JBIG compression
IMWRITE_TIFF_COMPRESSION_NEXT = 32766 , //!< NeXT 2-bit RLE
IMWRITE_TIFF_COMPRESSION_CCITTRLEW = 32771 , //!< #1 w/ word alignment
IMWRITE_TIFF_COMPRESSION_PACKBITS = 32773 , //!< Macintosh RLE
IMWRITE_TIFF_COMPRESSION_THUNDERSCAN = 32809 , //!< ThunderScan RLE
IMWRITE_TIFF_COMPRESSION_IT8CTPAD = 32895 , //!< IT8 CT w/padding
IMWRITE_TIFF_COMPRESSION_IT8LW = 32896 , //!< IT8 Linework RLE
IMWRITE_TIFF_COMPRESSION_IT8MP = 32897 , //!< IT8 Monochrome picture
IMWRITE_TIFF_COMPRESSION_IT8BL = 32898 , //!< IT8 Binary line art
IMWRITE_TIFF_COMPRESSION_PIXARFILM = 32908 , //!< Pixar companded 10bit LZW
IMWRITE_TIFF_COMPRESSION_PIXARLOG = 32909 , //!< Pixar companded 11bit ZIP
IMWRITE_TIFF_COMPRESSION_DEFLATE = 32946 , //!< Deflate compression, legacy tag
IMWRITE_TIFF_COMPRESSION_ADOBE_DEFLATE = 8 , //!< Deflate compression, as recognized by Adobe
IMWRITE_TIFF_COMPRESSION_DCS = 32947 , //!< Kodak DCS encoding
IMWRITE_TIFF_COMPRESSION_JBIG = 34661 , //!< ISO JBIG
IMWRITE_TIFF_COMPRESSION_SGILOG = 34676 , //!< SGI Log Luminance RLE
IMWRITE_TIFF_COMPRESSION_SGILOG24 = 34677 , //!< SGI Log 24-bit packed
IMWRITE_TIFF_COMPRESSION_JP2000 = 34712 , //!< Leadtools JPEG2000
IMWRITE_TIFF_COMPRESSION_LERC = 34887 , //!< ESRI Lerc codec: https://github.com/Esri/lerc
IMWRITE_TIFF_COMPRESSION_LZMA = 34925 , //!< LZMA2
IMWRITE_TIFF_COMPRESSION_ZSTD = 50000 , //!< ZSTD: WARNING not registered in Adobe-maintained registry
IMWRITE_TIFF_COMPRESSION_WEBP = 50001 , //!< WEBP: WARNING not registered in Adobe-maintained registry
IMWRITE_TIFF_COMPRESSION_JXL = 50002 //!< JPEGXL: WARNING not registered in Adobe-maintained registry
} ;
enum ImwriteTiffPredictorFlags {
IMWRITE_TIFF_PREDICTOR_NONE = 1 , //!< no prediction scheme used
IMWRITE_TIFF_PREDICTOR_HORIZONTAL = 2 , //!< horizontal differencing
IMWRITE_TIFF_PREDICTOR_FLOATINGPOINT = 3 //!< floating point predictor
} ;
2022-06-21 02:42:50 +08:00
2017-12-15 17:23:44 +08:00
enum ImwriteEXRTypeFlags {
/*IMWRITE_EXR_TYPE_UNIT = 0, //!< not supported */
2022-01-15 04:42:37 +08:00
IMWRITE_EXR_TYPE_HALF = 1 , //!< store as HALF (FP16)
IMWRITE_EXR_TYPE_FLOAT = 2 //!< store as FP32 (default)
2017-12-15 17:23:44 +08:00
} ;
2021-02-21 00:28:08 +08:00
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
2021-04-28 15:41:59 +08:00
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.
2021-02-21 00:28:08 +08:00
} ;
2015-10-01 22:25:18 +08:00
//! 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 .
*/
2015-05-04 19:24:25 +08:00
enum ImwritePNGFlags {
2015-10-01 22:25:18 +08:00
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.
2014-07-04 22:48:15 +08:00
} ;
2012-04-30 22:33:52 +08:00
2022-01-15 04:42:37 +08:00
//! Imwrite PAM specific tupletype flags used to define the 'TUPLETYPE' field of a PAM file.
2016-07-14 21:27:36 +08:00
enum ImwritePAMFlags {
2022-01-15 04:42:37 +08:00
IMWRITE_PAM_FORMAT_NULL = 0 ,
IMWRITE_PAM_FORMAT_BLACKANDWHITE = 1 ,
IMWRITE_PAM_FORMAT_GRAYSCALE = 2 ,
2016-07-14 21:27:36 +08:00
IMWRITE_PAM_FORMAT_GRAYSCALE_ALPHA = 3 ,
2022-01-15 04:42:37 +08:00
IMWRITE_PAM_FORMAT_RGB = 4 ,
IMWRITE_PAM_FORMAT_RGB_ALPHA = 5
2016-07-14 21:27:36 +08:00
} ;
2022-11-19 02:09:26 +08:00
//! Imwrite HDR specific values for IMWRITE_HDR_COMPRESSION parameter key
enum ImwriteHDRCompressionFlags {
IMWRITE_HDR_COMPRESSION_NONE = 0 ,
IMWRITE_HDR_COMPRESSION_RLE = 1
} ;
2020-10-28 09:51:12 +08:00
//! @} imgcodecs_flags
2014-11-19 16:29:31 +08:00
/** @brief Loads an image from a file.
2015-01-18 11:28:58 +08:00
@ anchor imread
2024-09-17 14:34:38 +08:00
The ` imread ` function loads an image from the specified file and returns OpenCV matrix . If the image cannot be
read ( because of a missing file , improper permissions , or unsupported / invalid format ) , the function
returns an empty matrix .
2015-10-01 22:25:18 +08:00
Currently , the following file formats are supported :
2014-11-19 16:29:31 +08:00
- Windows bitmaps - \ * . bmp , \ * . dib ( always supported )
2018-10-12 04:27:13 +08:00
- 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 )
2023-06-09 20:39:10 +08:00
- AVIF - \ * . avif ( see the * Note * section )
2024-09-17 14:34:38 +08:00
- Portable image format - \ * . pbm , \ * . pgm , \ * . ppm , \ * . pxm , \ * . pnm ( always supported )
2018-11-22 00:59:37 +08:00
- PFM files - \ * . pfm ( see the * Note * section )
2014-11-19 16:29:31 +08:00
- Sun rasters - \ * . sr , \ * . ras ( always supported )
2018-10-12 04:27:13 +08:00
- TIFF files - \ * . tiff , \ * . tif ( see the * Note * section )
- OpenEXR Image files - \ * . exr ( see the * Note * section )
2015-08-03 23:57:33 +08:00
- Radiance HDR - \ * . hdr , \ * . pic ( always supported )
2018-10-12 04:27:13 +08:00
- Raster and Vector geospatial data supported by GDAL ( see the * Note * section )
2014-11-19 16:29:31 +08:00
@ note
2024-09-17 14:34:38 +08:00
- The function determines the type of an image by its content , not by the file extension .
2015-10-01 22:25:18 +08:00
- In the case of color images , the decoded images will have the channels stored in * * B G R * * order .
2018-09-30 21:22:26 +08:00
- When using IMREAD_GRAYSCALE , the codec ' s internal grayscale conversion will be used , if available .
2024-09-17 14:34:38 +08:00
Results may differ from the output of cvtColor ( ) .
- On Microsoft Windows \ * and Mac OS \ * , the codecs shipped with OpenCV ( libjpeg , libpng , libtiff ,
and libjasper ) are used by default . So , OpenCV can always read JPEGs , PNGs , and TIFFs . On Mac OS ,
there is also an option to use native Mac OS image readers . However , beware that currently these
native image loaders give images with different pixel values because of the color management embedded
into Mac OS .
- On Linux \ * , BSD flavors , and other Unix - like open - source operating systems , OpenCV looks for
codecs supplied with the OS . Ensure the relevant packages are installed ( including development
files , such as " libjpeg-dev " in Debian \ * and Ubuntu \ * ) to get codec support , or turn
2014-11-21 16:28:14 +08:00
on the OPENCV_BUILD_3RDPARTY_LIBS flag in CMake .
2024-09-17 14:34:38 +08:00
- If the * WITH_GDAL * flag is set to true in CMake and @ ref IMREAD_LOAD_GDAL is used to load the image ,
the [ GDAL ] ( http : //www.gdal.org) driver will be used to decode the image, supporting
[ Raster ] ( http : //www.gdal.org/formats_list.html) and [Vector](http://www.gdal.org/ogr_formats.html) formats.
- 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 unless the flags @ ref IMREAD_IGNORE_ORIENTATION
2020-02-07 21:54:34 +08:00
or @ ref IMREAD_UNCHANGED are passed .
2024-09-17 14:34:38 +08:00
- Use the IMREAD_UNCHANGED flag to preserve the floating - point values from PFM images .
- By default , the number of pixels must be less than 2 ^ 30. This limit can be changed by setting
the environment variable ` OPENCV_IO_MAX_IMAGE_PIXELS ` . See @ ref tutorial_env_reference .
2018-10-12 04:27:13 +08:00
2024-09-17 14:34:38 +08:00
@ param filename Name of the file to be loaded .
@ param flags Flag that can take values of ` cv : : ImreadModes ` .
2015-10-01 22:25:18 +08:00
*/
2024-07-03 15:58:25 +08:00
CV_EXPORTS_W Mat imread ( const String & filename , int flags = IMREAD_COLOR_BGR ) ;
2015-06-27 22:18:51 +08:00
2024-03-29 15:51:19 +08:00
/** @brief Loads an image from a file.
This is an overloaded member function , provided for convenience . It differs from the above function only in what argument ( s ) it accepts and the return value .
@ param filename Name of file to be loaded .
@ param dst object in which the image will be loaded .
@ param flags Flag that can take values of cv : : ImreadModes
@ note
The image passing through the img parameter can be pre - allocated . The memory is reused if the shape and the type match with the load image .
*/
2024-07-03 15:58:25 +08:00
CV_EXPORTS_W void imread ( const String & filename , OutputArray dst , int flags = IMREAD_COLOR_BGR ) ;
2024-03-29 15:51:19 +08:00
2015-10-01 22:25:18 +08:00
/** @brief Loads a multi-page image from a file.
2014-12-29 23:50:42 +08:00
2015-10-01 22:25:18 +08:00
The function imreadmulti loads a multi - page image from the specified file into a vector of Mat objects .
2014-12-29 23:50:42 +08:00
@ param filename Name of file to be loaded .
2022-01-15 04:36:53 +08:00
@ param mats A vector of Mat objects holding each page .
2015-10-01 22:25:18 +08:00
@ param flags Flag that can take values of cv : : ImreadModes , default with cv : : IMREAD_ANYCOLOR .
@ sa cv : : imread
2014-12-29 23:50:42 +08:00
*/
2017-09-08 21:09:00 +08:00
CV_EXPORTS_W bool imreadmulti ( const String & filename , CV_OUT std : : vector < Mat > & mats , int flags = IMREAD_ANYCOLOR ) ;
2021-04-24 04:48:32 +08:00
2024-07-09 09:23:16 +08:00
/** @brief Loads images of a multi-page image from a file.
2021-04-24 04:48:32 +08:00
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 .
2022-01-15 04:36:53 +08:00
@ param mats A vector of Mat objects holding each page .
2021-04-24 04:48:32 +08:00
@ 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 ) ;
2024-07-09 09:23:16 +08:00
/** @brief Returns the number of images inside the given file
2021-04-24 04:48:32 +08:00
2024-07-04 00:55:35 +08:00
The function imcount returns the number of pages in a multi - page image ( e . g . TIFF ) , the number of frames in an animation ( e . g . AVIF ) , and 1 otherwise .
If the image cannot be decoded , 0 is returned .
2021-04-24 04:48:32 +08:00
@ param filename Name of file to be loaded .
@ param flags Flag that can take values of cv : : ImreadModes , default with cv : : IMREAD_ANYCOLOR .
2024-07-04 00:55:35 +08:00
@ todo when cv : : IMREAD_LOAD_GDAL flag used the return value will be 0 or 1 because OpenCV ' s GDAL decoder doesn ' t support multi - page reading yet .
2021-04-24 04:48:32 +08:00
*/
CV_EXPORTS_W size_t imcount ( const String & filename , int flags = IMREAD_ANYCOLOR ) ;
2014-12-29 23:50:42 +08:00
2014-11-19 16:29:31 +08:00
/** @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
2023-03-26 08:03:16 +08:00
filename extension ( see cv : : imread for the list of extensions ) . In general , only 8 - bit unsigned ( CV_8U )
2018-10-12 04:27:13 +08:00
single - channel or 3 - channel ( with ' BGR ' channel order ) images
can be saved using this function , with these exceptions :
2023-03-26 08:03:16 +08:00
- With OpenEXR encoder , only 32 - bit float ( CV_32F ) images can be saved .
- 8 - bit unsigned ( CV_8U ) images are not supported .
- With Radiance HDR encoder , non 64 - bit float ( CV_64F ) images can be saved .
- All images will be converted to 32 - bit float ( CV_32F ) .
- With JPEG 2000 encoder , 8 - bit unsigned ( CV_8U ) and 16 - bit unsigned ( CV_16U ) images can be saved .
- With PAM encoder , 8 - bit unsigned ( CV_8U ) and 16 - bit unsigned ( CV_16U ) images can be saved .
- With PNG encoder , 8 - bit unsigned ( CV_8U ) and 16 - bit unsigned ( CV_16U ) images can be saved .
- 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 ) .
- With PGM / PPM encoder , 8 - bit unsigned ( CV_8U ) and 16 - bit unsigned ( CV_16U ) images can be saved .
2023-03-26 17:33:54 +08:00
- With TIFF encoder , 8 - bit unsigned ( CV_8U ) , 16 - bit unsigned ( CV_16U ) ,
2023-03-26 08:03:16 +08:00
32 - bit float ( CV_32F ) and 64 - bit float ( CV_64F ) images can be saved .
- Multiple images ( vector of Mat ) can be saved in TIFF format ( see the code sample below ) .
- 32 - bit float 3 - channel ( CV_32FC3 ) TIFF images will be saved
using the LogLuv high dynamic range encoding ( 4 bytes per pixel )
2018-10-12 04:27:13 +08:00
2021-05-12 18:18:58 +08:00
If the image format is not supported , the image will be converted to 8 - bit unsigned ( CV_8U ) and saved that way .
2018-10-12 04:27:13 +08:00
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 .
2015-10-01 22:25:18 +08:00
2020-07-02 04:50:09 +08:00
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 :
2017-12-31 19:13:13 +08:00
@ include snippets / imgcodecs_imwrite . cpp
2015-10-01 22:25:18 +08:00
@ param filename Name of the file .
2020-07-02 04:50:09 +08:00
@ param img ( Mat or vector of Mat ) Image or Images to be saved .
2015-10-01 22:25:18 +08:00
@ param params Format - specific parameters encoded as pairs ( paramId_1 , paramValue_1 , paramId_2 , paramValue_2 , . . . . ) see cv : : ImwriteFlags
*/
2014-07-04 22:48:15 +08:00
CV_EXPORTS_W bool imwrite ( const String & filename , InputArray img ,
const std : : vector < int > & params = std : : vector < int > ( ) ) ;
2012-10-17 15:12:04 +08:00
2024-03-05 21:19:45 +08:00
//! @brief multi-image overload for bindings
2020-10-07 18:19:17 +08:00
CV_WRAP static inline
bool imwritemulti ( const String & filename , InputArrayOfArrays img ,
const std : : vector < int > & params = std : : vector < int > ( ) )
{
return imwrite ( filename , img , params ) ;
}
2014-11-19 16:29:31 +08:00
/** @brief Reads an image from a buffer in memory.
2015-10-01 22:25:18 +08:00
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 ) .
2014-11-19 16:29:31 +08:00
2015-10-01 22:25:18 +08:00
See cv : : imread for the list of supported formats and flags description .
2014-11-19 16:29:31 +08:00
2015-10-01 22:25:18 +08:00
@ 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 ) ;
2014-11-19 16:29:31 +08:00
2015-10-01 22:25:18 +08:00
/** @overload
2023-10-06 18:33:21 +08:00
@ param buf Input array or vector of bytes .
@ param flags The same flags as in cv : : imread , see cv : : ImreadModes .
2015-10-01 22:25:18 +08:00
@ param dst The optional output placeholder for the decoded matrix . It can save the image
2024-01-27 18:32:12 +08:00
reallocations when the function is called repeatedly for images of the same size . In case of decoder
failure the function returns empty cv : : Mat object , but does not release user - provided dst buffer .
2015-10-01 22:25:18 +08:00
*/
2014-07-04 22:48:15 +08:00
CV_EXPORTS Mat imdecode ( InputArray buf , int flags , Mat * dst ) ;
2010-05-12 01:44:00 +08:00
2022-10-11 19:25:35 +08:00
/** @brief Reads a multi-page image from a buffer in memory.
The function imdecodemulti reads a multi - page image from the specified buffer in the memory . If the buffer is too short or
contains invalid data , the function returns false .
See cv : : imreadmulti 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 .
@ param mats A vector of Mat objects holding each page , if more than one .
2023-10-30 16:58:08 +08:00
@ param range A continuous selection of pages .
2022-10-11 19:25:35 +08:00
*/
2023-10-30 16:58:08 +08:00
CV_EXPORTS_W bool imdecodemulti ( InputArray buf , int flags , CV_OUT std : : vector < Mat > & mats , const cv : : Range & range = Range : : all ( ) ) ;
2022-10-11 19:25:35 +08:00
2014-11-19 16:29:31 +08:00
/** @brief Encodes an image into a memory buffer.
2015-10-01 22:25:18 +08:00
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 .
2022-05-06 20:41:52 +08:00
@ param ext File extension that defines the output format . Must include a leading period .
2014-11-19 16:29:31 +08:00
@ param img Image to be written .
@ param buf Output buffer resized to fit the compressed image .
2015-10-01 22:25:18 +08:00
@ param params Format - specific parameters . See cv : : imwrite and cv : : ImwriteFlags .
*/
2014-07-04 22:48:15 +08:00
CV_EXPORTS_W bool imencode ( const String & ext , InputArray img ,
CV_OUT std : : vector < uchar > & buf ,
const std : : vector < int > & params = std : : vector < int > ( ) ) ;
2010-05-12 01:44:00 +08:00
2024-07-10 20:24:37 +08:00
/** @brief Checks if the specified image file can be decoded by OpenCV.
2018-11-09 05:52:09 +08:00
2024-07-10 20:24:37 +08:00
The function haveImageReader checks if OpenCV is capable of reading the specified file .
This can be useful for verifying support for a given image format before attempting to load an image .
@ param filename The name of the file to be checked .
@ return true if an image reader for the specified file is available and the file can be opened , false otherwise .
@ note The function checks the availability of image codecs that are either built into OpenCV or dynamically loaded .
It does not check for the actual existence of the file but rather the ability to read the specified file type .
If the file cannot be opened or the format is unsupported , the function will return false .
@ sa cv : : haveImageWriter , cv : : imread , cv : : imdecode
2018-11-09 05:52:09 +08:00
*/
CV_EXPORTS_W bool haveImageReader ( const String & filename ) ;
2024-07-10 20:24:37 +08:00
/** @brief Checks if the specified image file or specified file extension can be encoded by OpenCV.
2018-11-09 05:52:09 +08:00
2024-07-10 20:24:37 +08:00
The function haveImageWriter checks if OpenCV is capable of writing images with the specified file extension .
This can be useful for verifying support for a given image format before attempting to save an image .
@ param filename The name of the file or the file extension ( e . g . , " .jpg " , " .png " ) .
It is recommended to provide the file extension rather than the full file name .
@ return true if an image writer for the specified extension is available , false otherwise .
@ note The function checks the availability of image codecs that are either built into OpenCV or dynamically loaded .
It does not check for the actual existence of the file but rather the ability to write files of the given type .
@ sa cv : : haveImageReader , cv : : imwrite , cv : : imencode
*/
2018-11-09 05:52:09 +08:00
CV_EXPORTS_W bool haveImageWriter ( const String & filename ) ;
2024-07-10 20:24:37 +08:00
/** @brief To read multi-page images on demand
2022-06-17 07:10:25 +08:00
2024-07-10 20:24:37 +08:00
The ImageCollection class provides iterator API to read multi - page images on demand . Create iterator
2022-06-17 07:10:25 +08:00
to the collection of the images and iterate over the collection . Decode the necessary page with operator * .
The performance of page decoding is O ( 1 ) if collection is increment sequentially . If the user wants to access random page ,
then the time Complexity is O ( n ) because the collection has to be reinitialized every time in order to go to the correct page .
However , the intermediate pages are not decoded during the process , so typically it ' s quite fast .
2024-07-10 20:24:37 +08:00
This is required because multi - page codecs does not support going backwards .
2022-06-17 07:10:25 +08:00
After decoding the one page , it is stored inside the collection cache . Hence , trying to get Mat object from already decoded page is O ( 1 ) .
If you need memory , you can use . releaseCache ( ) method to release cached index .
The space complexity is O ( n ) if all pages are decoded into memory . The user is able to decode and release images on demand .
*/
class CV_EXPORTS ImageCollection {
public :
struct CV_EXPORTS iterator {
iterator ( ImageCollection * col ) ;
iterator ( ImageCollection * col , int end ) ;
Mat & operator * ( ) ;
Mat * operator - > ( ) ;
iterator & operator + + ( ) ;
iterator operator + + ( int ) ;
2022-09-28 06:06:46 +08:00
friend bool operator = = ( const iterator & a , const iterator & b ) { return a . m_curr = = b . m_curr ; }
friend bool operator ! = ( const iterator & a , const iterator & b ) { return a . m_curr ! = b . m_curr ; }
2022-06-17 07:10:25 +08:00
private :
ImageCollection * m_pCollection ;
int m_curr ;
} ;
ImageCollection ( ) ;
ImageCollection ( const String & filename , int flags ) ;
void init ( const String & img , int flags ) ;
size_t size ( ) const ;
const Mat & at ( int index ) ;
const Mat & operator [ ] ( int index ) ;
void releaseCache ( int index ) ;
iterator begin ( ) ;
iterator end ( ) ;
class Impl ;
Ptr < Impl > getImpl ( ) ;
protected :
Ptr < Impl > pImpl ;
} ;
2018-11-09 05:52:09 +08:00
2014-11-19 16:29:31 +08:00
//! @} imgcodecs
2014-07-04 22:48:15 +08:00
} // cv
2012-04-30 22:33:52 +08:00
2016-09-30 17:46:29 +08:00
# endif //OPENCV_IMGCODECS_HPP