adding new flags to imread to load image reduced
This commit is contained in:
@@ -238,7 +238,7 @@ enum { LOAD_CVMAT=0, LOAD_IMAGE=1, LOAD_MAT=2 };
|
||||
*
|
||||
*/
|
||||
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;
|
||||
@@ -252,7 +252,7 @@ imread_( const String& filename, int flags, int hdrtype, Mat* mat=0, int scale_d
|
||||
decoder = GdalDecoder().newDecoder();
|
||||
}else{
|
||||
#endif
|
||||
decoder = findDecoder(filename);
|
||||
decoder = findDecoder( filename );
|
||||
#ifdef HAVE_GDAL
|
||||
}
|
||||
#endif
|
||||
@@ -262,11 +262,22 @@ imread_( const String& filename, int flags, int hdrtype, Mat* mat=0, int scale_d
|
||||
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() )
|
||||
@@ -296,7 +307,7 @@ imread_( const String& filename, int flags, int hdrtype, Mat* mat=0, int scale_d
|
||||
if( hdrtype == LOAD_CVMAT )
|
||||
{
|
||||
matrix = cvCreateMat( size.height, size.width, type );
|
||||
temp = cvarrToMat(matrix);
|
||||
temp = cvarrToMat( matrix );
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -307,7 +318,7 @@ imread_( const String& filename, int flags, int hdrtype, Mat* mat=0, int scale_d
|
||||
else
|
||||
{
|
||||
image = cvCreateImage( size, cvIplDepth(type), CV_MAT_CN(type) );
|
||||
temp = cvarrToMat(image);
|
||||
temp = cvarrToMat( image );
|
||||
}
|
||||
|
||||
// read the image data
|
||||
@@ -320,10 +331,9 @@ imread_( const String& filename, int flags, int hdrtype, Mat* mat=0, int scale_d
|
||||
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 :
|
||||
@@ -421,27 +431,6 @@ Mat imread( const String& filename, int flags )
|
||||
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
|
||||
*
|
||||
|
Reference in New Issue
Block a user