前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【从零学习OpenCV 4】图像读取函数imread

【从零学习OpenCV 4】图像读取函数imread

作者头像
小白学视觉
发布2019-11-07 15:39:36
3.1K0
发布2019-11-07 15:39:36
举报

我们在前面已经见过了图像读取函数imread()的调用方式,这里我们给出函数的原型。

代码语言:javascript
复制
代码清单2-24 imread()函数的原型
cv::Mat cv::imread(const String & filename,
            int  flags=IMREAD_COLOR
            )
  • filename:需要读取图像的文件名称,包含图像地址、名称和图像文件扩展名
  • flags:读取图像形式的标志,如将彩色图像按照灰度图读取,默认参数是按照彩色图像格式读取,可选参数在表2-3给出。

函数用于读取指定的图像并将其返回给一个Mat类变量,如果图像文件不存在、破损或者格式不受支持时,则无法读取图像,此时函数返回一个空矩阵,因此可以通过判断返回矩阵的data属性是否为空或者empty()函数是否为真来判断是否成功读取图像,如果读取图像失败,data属性返回值为0,empty()函数返回值为1。函数能够读取多种格式的图像文件,但是在不同操作系统由于使用的编解码器不同,因此在某个系统中能够读取的图像文件可能在其他系统中就无法读取。无论在哪个系统中,bmp文件和dib文件都是始终可以读取的,在Windows和Mac系统中,默认情况下使用OpenCV自带的编解码器(libjpeg,libpng,libtiff和libjasper),因此可以读取JPEG(jpg、jpeg、jpe),PNG,TIFF(tiff、tif)文件,在Linux系统中需要自行安装这些编解码器,安装后同样可以读取这些类型的文件。不过需要说明的是,该函数能否读取文件数据与扩展名无关,而是通过文件的内容确定图像的类型,例如将一个扩展名由png修改成exe时,该函数一样可以读取该图像,但是将扩展名exe改成png,该函数不能加载该文件。

该函数第一个参数以字符串形式给出待读取图像的地址,第二个函数是设置读取图像的形式,默认的参数是以彩色图的形式读取,针对不同需求可以更改参数,在OpenCV 4.1中给出了13种模式读取图像的形式,总结起来分别是以原样式读取、灰度图读取、彩色图读取、多位数读取、在读取时将图像缩小一定尺寸等形式读取,具体可选择的参数及作用在表2-3种给出,这里需要指出的是,将彩色图像转成灰度图通过编解码器内部转换,可能会与OpenCV程序中将彩色图像转成灰度图的结果存在差异。这些标志参数在功能不冲突的前提下可以同时声明多个,不同参数之间用“|”隔开。

表2-3 imread()函数读取图像形式参数

标志参数

简记

作用

IMREAD_UNCHANGED

-1

按照图像原样读取,保留Alpha通道(第4通道)

IMREAD_GRAYSCALE

0

将图像转成单通道灰度图像后读取

IMREAD_COLOR

1

将图像转换成3通道BGR彩色图像

IMREAD_ANYDEPTH

2

保留原图像的16位、32位深度,不声明该参数则转成8位读取

IMREAD_ANYCOLOR

4

以任何可能的颜色读取图像

IMREAD_LOAD_GDAL

8

使用gdal驱动程序加载图像

IMREAD_REDUCED_GRAYSCALE_2

16

将图像转成单通道灰度图像,尺寸缩小1/2,可以更改最后一位数字实现缩小1/4(最后一位改为4)和1/8(最后一位改为8)

IMREAD_REDUCED_COLOR_2

17

将图像转成3通道彩色图像,尺寸缩小1/2,可以更改最后一位数字实现缩小1/4(最后一位改为4)和1/8(最后一位改为8)

IMREAD_IGNORE_ORIENTATION

128

不以EXIF的方向旋转图像

注意

默认情况下,读取图像的像素数目必须小于2^30,这个要求在绝大多数图像处理领域都是不受影响的,但是卫星遥感图像、超高分辨率图像的像素数目可能会超过这个阈值,可以通过修改系统变量中的OPENCV_IO_MAX_IMAGE_PIXELS参数调整能够读取的最大像素数目。

从零学习OpenCV 4往期推荐

【从零学习OpenCV 4】Windows系统中安装OpenCV 4

【从零学习OpenCV 4】Ubuntu系统中安装OpenCV 4

【从零学习OpenCV 4】opencv_contrib扩展模块的安装

【从零学习OpenCV 4】Mat类介绍

【从零学习OpenCV 4】Mat类构造与赋值

【从零学习OpenCV 4】Mat类支持的运算

【从零学习OpenCV 4】这4种读取Mat类元素的的方法你都知道么?

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小白学视觉 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档