OpenCV中imread函数的使用

时间:2021-06-14 17:15:42
     最近在使用OpenCV中的imread函数时,对该函数的第二个参数flags的使用心存疑虑,不太明白其使用方法,因此对其做了一些
研究。
    首先,看一下它的定义,该函数位于Highgui.h和Loadsave.cpp文件中。    
         Mat imread( const string& filename, int flags )
{
Mat img;
imread_( filename, flags, LOAD_MAT, &img );
return img;
}
接下来看一下imread_函数中关于flags的部分
         int type = decoder->type();         if( flags != -1 )         {             if( (flags & CV_LOAD_IMAGE_ANYDEPTH) == 0 )                  type = CV_MAKETYPE(CV_8U, CV_MAT_CN(type));             if( (flags & CV_LOAD_IMAGE_COLOR) != 0 ||                 ((flags & CV_LOAD_IMAGE_ANYCOLOR) != 0 && CV_MAT_CN(type) > 1) )                  type = CV_MAKETYPE(CV_MAT_DEPTH(type), 3);             else                  type = CV_MAKETYPE(CV_MAT_DEPTH(type), 1);         }
其中,CV_LOAD_IMAGE_XXX定义位于Highgui_c.h文件中
        enum        {        /* 8bit, color or not */           CV_LOAD_IMAGE_UNCHANGED  =-1,        /* 8bit, gray */           CV_LOAD_IMAGE_GRAYSCALE  =0,        /* ?, color */           CV_LOAD_IMAGE_COLOR      =1,        /* any depth, ? */           CV_LOAD_IMAGE_ANYDEPTH   =2,        /* ?, any color */           CV_LOAD_IMAGE_ANYCOLOR   =4        };
由此,我们可以得出如下结论:
flags = -1:imread按解码得到的方式读入图像
flags = 0:imread按单通道的方式读入图像,即灰白图像
flags = 1:imread按三通道方式读入图像,即彩色图像