Commit 7c226ed7 authored by Suleyman TURKMEN's avatar Suleyman TURKMEN

adding new flags to imread to load image reduced

parent 7d7f5c19
...@@ -62,12 +62,18 @@ namespace cv ...@@ -62,12 +62,18 @@ namespace cv
//! Imread flags //! Imread flags
enum ImreadModes { enum ImreadModes {
IMREAD_UNCHANGED = -1, //!< If set, return the loaded image as is (with alpha channel, otherwise it gets cropped). 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_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_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_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_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_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 //! Imwrite flags
...@@ -133,14 +139,6 @@ returns an empty matrix ( Mat::data==NULL ). Currently, the following file forma ...@@ -133,14 +139,6 @@ returns an empty matrix ( Mat::data==NULL ). Currently, the following file forma
*/ */
CV_EXPORTS_W Mat imread( const String& filename, int flags = IMREAD_COLOR ); 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.) /** @brief Loads a multi-page image from a file. (see imread for details.)
@param filename Name of file to be loaded. @param filename Name of file to be loaded.
......
...@@ -238,7 +238,7 @@ enum { LOAD_CVMAT=0, LOAD_IMAGE=1, LOAD_MAT=2 }; ...@@ -238,7 +238,7 @@ enum { LOAD_CVMAT=0, LOAD_IMAGE=1, LOAD_MAT=2 };
* *
*/ */
static void* 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; IplImage* image = 0;
CvMat *matrix = 0; CvMat *matrix = 0;
...@@ -252,7 +252,7 @@ imread_( const String& filename, int flags, int hdrtype, Mat* mat=0, int scale_d ...@@ -252,7 +252,7 @@ imread_( const String& filename, int flags, int hdrtype, Mat* mat=0, int scale_d
decoder = GdalDecoder().newDecoder(); decoder = GdalDecoder().newDecoder();
}else{ }else{
#endif #endif
decoder = findDecoder(filename); decoder = findDecoder( filename );
#ifdef HAVE_GDAL #ifdef HAVE_GDAL
} }
#endif #endif
...@@ -262,11 +262,22 @@ imread_( const String& filename, int flags, int hdrtype, Mat* mat=0, int scale_d ...@@ -262,11 +262,22 @@ imread_( const String& filename, int flags, int hdrtype, Mat* mat=0, int scale_d
return 0; 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 /// set the scale_denom in the driver
decoder->setScale( scale_denom ); decoder->setScale( scale_denom );
/// set the filename in the driver /// set the filename in the driver
decoder->setSource(filename); decoder->setSource( filename );
// read the header to make sure it succeeds // read the header to make sure it succeeds
if( !decoder->readHeader() ) if( !decoder->readHeader() )
...@@ -296,7 +307,7 @@ imread_( const String& filename, int flags, int hdrtype, Mat* mat=0, int scale_d ...@@ -296,7 +307,7 @@ imread_( const String& filename, int flags, int hdrtype, Mat* mat=0, int scale_d
if( hdrtype == LOAD_CVMAT ) if( hdrtype == LOAD_CVMAT )
{ {
matrix = cvCreateMat( size.height, size.width, type ); matrix = cvCreateMat( size.height, size.width, type );
temp = cvarrToMat(matrix); temp = cvarrToMat( matrix );
} }
else else
{ {
...@@ -307,7 +318,7 @@ imread_( const String& filename, int flags, int hdrtype, Mat* mat=0, int scale_d ...@@ -307,7 +318,7 @@ imread_( const String& filename, int flags, int hdrtype, Mat* mat=0, int scale_d
else else
{ {
image = cvCreateImage( size, cvIplDepth(type), CV_MAT_CN(type) ); image = cvCreateImage( size, cvIplDepth(type), CV_MAT_CN(type) );
temp = cvarrToMat(image); temp = cvarrToMat( image );
} }
// read the image data // read the image data
...@@ -320,10 +331,9 @@ imread_( const String& filename, int flags, int hdrtype, Mat* mat=0, int scale_d ...@@ -320,10 +331,9 @@ imread_( const String& filename, int flags, int hdrtype, Mat* mat=0, int scale_d
return 0; return 0;
} }
int testdecoder = decoder->setScale( scale_denom ); // if decoder is JpegDecoder then testdecoder will be 1 if( decoder->setScale( scale_denom ) > 1 ) // if decoder is JpegDecoder then decoder->setScale always returns 1
if( (scale_denom > 1 ) & ( testdecoder > 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 : return hdrtype == LOAD_CVMAT ? (void*)matrix :
...@@ -421,27 +431,6 @@ Mat imread( const String& filename, int flags ) ...@@ -421,27 +431,6 @@ Mat imread( const String& filename, int flags )
return img; return img;
} }
/**
* 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 * Read a multi-page image
* *
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment