//! Imread flags
enum ImreadModes {
- IMREAD_UNCHANGED = -1, //!< If set, return the loaded image as is (with alpha channel, otherwise it gets cropped).
- IMREAD_GRAYSCALE = 0, //!< If set, always convert image to the single channel grayscale image.
- 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_UNCHANGED = -1, //!< If set, return the loaded image as is (with alpha channel, otherwise it gets cropped).
+ IMREAD_GRAYSCALE = 0, //!< If set, always convert image to the single channel grayscale image.
+ 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_GRAYSCALE_REDUCED_2 = 16, //!< If set, always convert image to the single channel grayscale image and the image size reduced 1/2.
+ IMREAD_COLOR_REDUCED_2 = 17, //!< If set, always convert image to the 3 channel BGR color image and the image size reduced 1/2.
+ IMREAD_GRAYSCALE_REDUCED_4 = 32, //!< If set, always convert image to the single channel grayscale image and the image size reduced 1/4.
+ IMREAD_COLOR_REDUCED_4 = 33, //!< If set, always convert image to the 3 channel BGR color image and the image size reduced 1/4.
+ IMREAD_GRAYSCALE_REDUCED_8 = 64, //!< If set, always convert image to the single channel grayscale image and the image size reduced 1/8.
+ IMREAD_COLOR_REDUCED_8 = 65 //!< If set, always convert image to the 3 channel BGR color image and the image size reduced 1/8.
};
//! Imwrite flags
*/
CV_EXPORTS_W Mat imread( const String& filename, int flags = IMREAD_COLOR );
-/** @brief Loads and resizes down an image from a file.
-@anchor imread_reduced
-@param filename Name of file to be loaded.
-@param flags Flag that can take values of @ref cv::ImreadModes
-@param scale_denom
- */
-CV_EXPORTS_W Mat imread_reduced( const String& filename, int flags = IMREAD_COLOR, int scale_denom=1 );
-
/** @brief Loads a multi-page image from a file. (see imread for details.)
@param filename Name of file to be loaded.
*
*/
static void*
-imread_( const String& filename, int flags, int hdrtype, Mat* mat=0, int scale_denom=1 )
+imread_( const String& filename, int flags, int hdrtype, Mat* mat=0 )
{
IplImage* image = 0;
CvMat *matrix = 0;
decoder = GdalDecoder().newDecoder();
}else{
#endif
- decoder = findDecoder(filename);
+ decoder = findDecoder( filename );
#ifdef HAVE_GDAL
}
#endif
return 0;
}
+ int scale_denom = 1;
+ if( flags > IMREAD_LOAD_GDAL )
+ {
+ if( flags & IMREAD_GRAYSCALE_REDUCED_2 )
+ scale_denom = 2;
+ else if( flags & IMREAD_GRAYSCALE_REDUCED_4 )
+ scale_denom = 4;
+ else if( flags & IMREAD_GRAYSCALE_REDUCED_8 )
+ scale_denom = 8;
+ }
+
/// set the scale_denom in the driver
decoder->setScale( scale_denom );
/// set the filename in the driver
- decoder->setSource(filename);
+ decoder->setSource( filename );
// read the header to make sure it succeeds
if( !decoder->readHeader() )
if( hdrtype == LOAD_CVMAT )
{
matrix = cvCreateMat( size.height, size.width, type );
- temp = cvarrToMat(matrix);
+ temp = cvarrToMat( matrix );
}
else
{
else
{
image = cvCreateImage( size, cvIplDepth(type), CV_MAT_CN(type) );
- temp = cvarrToMat(image);
+ temp = cvarrToMat( image );
}
// read the image data
return 0;
}
- int testdecoder = decoder->setScale( scale_denom ); // if decoder is JpegDecoder then testdecoder will be 1
- if( (scale_denom > 1 ) & ( testdecoder > 1 ) )
+ if( decoder->setScale( scale_denom ) > 1 ) // if decoder is JpegDecoder then decoder->setScale always returns 1
{
- resize(*mat,*mat,Size(size.width/scale_denom,size.height/scale_denom));
+ resize( *mat, *mat, Size( size.width / scale_denom, size.height / scale_denom ) );
}
return hdrtype == LOAD_CVMAT ? (void*)matrix :
}
/**
- * Read an image and resize it
- *
- * This function merely calls the actual implementation above and returns itself.
- *
- * @param[in] filename File to load
- * @param[in] flags Flags you wish to set.
- * @param[in] scale_denom Scale value
-*/
-Mat imread_reduced( const String& filename, int flags, int scale_denom )
-{
- /// create the basic container
- Mat img;
-
- /// load the data
- imread_( filename, flags, LOAD_MAT, &img, scale_denom );
-
- /// return a reference to the data
- return img;
-}
-
-/**
* Read a multi-page image
*
* This function merely calls the actual implementation above and returns itself.