|
|
|
@ -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 |
|
|
|
|
* |
|
|
|
|