目录
图像的载入与显示
imread() 函数和 imshow() 函数完成了最简单的图像载入和显示。
1. imread() 函数。原型如下:
Mat imread(const string& filename, int flags = 1);
(1)第一个参数,const string& 类型的 filename,对应需要载入的图片路径名。
(2)第二个参数,int 类型的 flags,为载入标识,指定一个加载图像的颜色类型。默认值为1,代表彩色图像。有如下枚举值:
CV_LOAD_IMAGE_UNCHANGED———等价取值为-1,新版本的OpenCV中将其废置,忽略。
CV_LOAD_IMAGE_GRAYSCALE———等价取值为0,始终将图像转换成灰度再返回。
CV_LOAD_IMAGE_COLOR——等价取值为1,始终将图像转到彩色再返回。
CV_LOAD_IMAGE_ANYDEPTH——等价取值为2,若载入图像的深度为16或32则返回对应深度的图像,否则将转为8位图像再返回。
若输入有冲突的标志,将使用较小的数字值。比如CV_LOAD_IMAGE_COLOR|CV_LOAD_IMAGE_ANYCOLOR将载入三通道图像。如果想载入最真是无损的原图像,可以选择CV_LOAD_IMAGE_ANYDEPTH|CV_LOAD_IMAGE_ANYCOLOR。
因为 flags 是 int 类型的变量,若我们不适用固定的枚举值,可以做如下判定:
flags > 0 返回一个 3 通道的彩色图像(解码后的图像会以BGR的通道顺序进行存储,即蓝、绿、红);
flags = 0 返回灰度图像;
flags < 0 返回包含 Alpha 通道的加载图像(默认情况下不包含 Alpha 通道)。
imread("cat.jpg", 2 | 4); //载入无损的源图像
imread("cat.jpg", 0); //载入灰度图
imread("cat.jpg", 199); //载入 3 通道的彩色图像
2. imshow() 函数。原型如下:
void imshow(const string& winname, InputArray mat);
(1)第一个参数,const string& 类型的 winname,为需要显示的窗口标识名称。
(2)第二个参数,InputArray 类型的 mat,为需要显示的图像。
imshow() 函数用于在指定的窗口中显示图像。若窗口是用 CV_WINDOW_AUTOSIZE(默认值)标志创建的,那么将显示图像原始大小。否则,将图像进行缩放以适应窗口。imshow() 函数缩放图像,取决于图像的深度;
如果载入的图像是 8 位无符号类型,则显示图像本来的样子。
如果图像是 16 位无符号数类型或 32 位整型,则用像素值除以 256,值的范围从 [0,256*256] 映射到 [0,255]。
如果图像是 32 位浮点型,像素值乘以 255。值的范围从 [0,1] 映射到 [1,255]。
3. namedWindow() 函数。原型如下:
void namedWindow(const string& winname, int flags = WINDOW_AUTOSIZE);
(1)第一个参数,const s