Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【从零学习OpenCV 4】图像读取函数imread

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

作者头像
小白学视觉
发布于 2019-11-07 07:39:36
发布于 2019-11-07 07:39:36
3.4K00
代码可运行
举报
运行总次数:0
代码可运行

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
代码清单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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
☀️Python+opencv常用函数☀️
waitKey函数既是opencv里常用又非常基础的函数,是刚开始学习opencv,还是使用opencv进行开发调试,都是waitKey函数的例子。然而最基础的东西可能容易看出忽略,在此可以忽略可以很好地了解这个基础又常用的waitKey函数。
苏州程序大白
2022/04/13
8520
Python+OpenCV的图像读取、显示、保存
一、图像的读取 图像的读取主要函数是cv2.imread()。 函数格式:Mat cv::imread (const String & filename, int flags = IMREAD_COLOR) 功能:读取图片文件。 参数: windows位图:后缀名为bmp JPEG文件:后缀名为jpeg/jpg JPEG2000:后缀名为jp2 便携式网络图像文件:后缀名为png TIFF文件:后缀名为tiff/tif 参数二是整型的flag,标志,默认值为IMREAD_COLOR,取值有如下几种: IMREAD_UNCHANGED:如果设置,则按原样返回加载的图像(带有Alpha通道,否则会被裁剪)。 IMREAD_GRAYSCALE:如果设置,总是将图像转换为单通道灰度图像读入。 IMREAD_COLOR:如果设置,总是将图像转换为3通道BGR彩色图像读入。 IMREAD_ANYDEPTH:如果设置,当输入具有相应深度时返回16位/ 32位图像,否则将其转换为8位。 IMREAD_ANYCOLOR:如果设置,图像将以任何可能的颜色格式读取。 IMREAD_LOAD_GDAL:如果设置,总是使用GDAL驱动程序加载图像。 IMREAD_REDUCED_GRAYSCALE_2:如果设置,总是将图像转换为单通道灰度图像,图像尺寸减小1/2。 IMREAD_REDUCED_COLOR_2:如果设置,总是将图像转换为3通道BGR彩色图像,图像尺寸减小1/2。 IMREAD_REDUCED_GRAYSCALE_4:如果设置,总是将图像转换为单通道灰度图像,图像尺寸减小1/4。 IMREAD_REDUCED_COLOR_4:如果设置,总是将图像转换为3通道BGR彩色图像,图像尺寸减小1/4。 IMREAD_REDUCED_GRAYSCALE_8:如果设置,总是将图像转换为单通道灰度图像,图像尺寸减小1/8。 IMREAD_REDUCED_COLOR_8:如果设置,总是将图像转换为3通道BGR彩色图像,图像尺寸减小1/8 常用的是前三种。因为flags是整型,所以传入数值也行: flags >0:等同于IMREAD_COLOR。 flags =0:等同于 IMREAD_GRAYSCALE。 flags <0: 等同于IMREAD_UNCHANGED。 通常是给1、0、-1,给其他整型也是可以的。 返回值:Mat类型。从opencv2开始,用于存放图像的数据类型就是Mat, 二、图像的显示 图像读取后,下一步就是再把图像显示出来,主要函数有:cv2.namedWindows()、cv2.imshow()。再另外再介绍三个函数cv2.waitKey()、cv2.destroyWindow()、cv2.destroyAllWindows()。 2.1 cv2.namedWindows函数介绍 void cv::namedWindow (const String & winname,int flags = WINDOW_AUTOSIZE ) 功能:创建一个窗口。 参数:参数一是winname,给创建的窗口起一个名字,以后通过这个名字调用该窗口;参数二整型的flags,定义窗口的属性,默认值是WINDOW_AUTOSIZE,其他取值如下所示: WINDOW_NORMAL:用户可以调整窗口大小(不受约束)/也可以使用将全屏窗口切换为正常大小。 WINDOW_AUTOSIZE:用户无法调整窗口大小,窗口大小随显示图像的大小而变化。 WINDOW_OPENGL:带有opengl支持的窗口。 WINDOW_FULLSCREEN:将窗口更改为全屏。 WINDOW_FREERATIO:不遵循图像的比例调整图像后在窗口显示 WINDOW_KEEPRATIO:根据图像的比例调整图像后在窗口中显示 2.2 cv2.imshow函数介绍 void cv::imshow (const String & winname, InputArray mat ) 功能:在指定窗口显示图像。 参数:参数一是窗口名;参数二设置为要显示的图像。 注意此函数之后应该跟随函数waitKey,指定窗口显示多少毫秒。 2.3 cv2.waitKey函数介绍 int cv::waitKey (int delay = 0) 功能:等待按键或延迟多少毫秒。 参数:整型的delay,默认值是0。设置为0表示永久等待按键,设置为非零,表示延迟delay毫秒。该函数仅在创建至少一个窗口并且窗口处于活动状态时才起作用。 2.4 cv2.destroyWind
菲宇
2019/11/12
3.7K0
OpenCV基础02--从文件显示加载图像
在本节中,我将向您展示如何使用 OpenCV 库函数从文件加载图像并在窗口中显示图像。
软件架构师Michael
2023/09/11
2310
讲解'imread' was not declared in this scope
在使用C++编写图像处理代码时,你可能会遇到 'imread' was not declared in this scope 的错误。这个错误通常是因为编译器无法找到 'imread' 函数的定义。在本篇博客文章中,我们将详细讲解这个错误的原因和解决方法。
大盘鸡拌面
2023/12/29
3360
OpenCV这么简单为啥不学——1、基础环境与imread函数
计算机视觉市场巨大而且持续增长,且这方面没有标准API,如今的计算机视觉软件大概有以下三种:
红目香薰
2023/02/10
5210
OpenCV这么简单为啥不学——1、基础环境与imread函数
【计算机视觉】OpenCV图像处理基础
OpenCV是目前最流行的计算机视觉处理库之一,受到了计算机视觉领域众多研究人员的喜爱。计算机视觉是一门研究如何让机器“看”的科学,即用计算机来模拟人的视觉机理,用摄像头代替人眼对目标进行识别、跟踪和测量等,通过处理视觉信息获得更深层次的信息。例如,通过拍摄环绕建筑物一周的视频,利用三维重建技术重建建筑物三维模型;通过放置在车辆上方的摄像头拍摄前方场景,推断车辆能否顺利通过前方区域等决策信息。对于人类来说,通过视觉获取环境信息是一件非常容易的事情,因此有人会误认为实现计算机视觉是一件非常容易的事情。但事实不是这样的,因为计算机视觉是一个逆问题,通过观测到的信息恢复被观测物体或环境的信息,在这个过程中会缺失部分信息,造成信息不足,增加问题的复杂性。例如,当通过单个摄像头拍摄场景时,因为失去了距离信息,所以常会出现图像中“人比楼房高”的现象。因此,计算机视觉领域的研究还有很长的路要走。
蒙娜丽宁
2023/03/08
2.2K0
【计算机视觉】OpenCV图像处理基础
OpenCV 4基础篇| OpenCV图像基本操作
游戏开发小Y
2024/02/25
4340
OpenCV 4基础篇| OpenCV图像基本操作
OpenCV中原始图像加载与保存压缩技巧
OpenCV中关于图像读写有两个函数imread与imwrite,imread加载的时候支持灰度图像、彩色图像、原始图像加载,默认情况下通过imread加载的图像都是三通道的BGR彩色图像。 但是实际上OpenCV支持加载任意通道的图像,首先来仔细再看一下imread函数
OpenCV学堂
2018/12/07
2.1K0
OpenCV-Python学习(2)—— OpenCV 图像的读取和显示
1. 学习目标 图像理解 图像读取与显示 2. 灰度图像 —— 单通道 1. 人眼中的灰度图像 2. 计算机中的灰度图像 [[ 72 72 71 ... 151 154 156] [ 75 73 69 ... 152 155 158] [ 78 73 66 ... 152 157 160] ... [ 94 94 94 ... 208 197 187] [ 92 92 93 ... 208 200 191] [ 96 96 97 ... 208 202 195]] 3
Rattenking
2022/09/30
1.3K0
OpenCV-Python学习(2)—— OpenCV 图像的读取和显示
【从零学习OpenCV】图像的保存&视频的保存
经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍《从零学习OpenCV 4》。为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通,提前在公众号上连载部分内容,请持续关注小白。
小白学视觉
2019/11/12
3.2K0
关于cv::imread读取图片类型的初探[通俗易懂]
在处理深度图的时候,在用 cv::imread 读取深度图像时,本以为得到的是单通道图,但实际是三通道图。所以仔细看了一下 cv::imread 函数。
全栈程序员站长
2022/11/19
1.8K0
关于cv::imread读取图片类型的初探[通俗易懂]
c语言opencv读取图像_matlab读取一幅图像并显示
专栏地址:『youcans 的 OpenCV 例程300篇 – 总目录』 01. 图像的读取(cv2.imread) 02. 图像的保存(cv2.imwrite) 03. 图像的显示(cv2.imshow) 04. 用 matplotlib 显示图像(plt.imshow)
全栈程序员站长
2022/09/27
1.8K0
opencv使用教程_opencv使用教程
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,它提供了很多函数,这些函数非常高效地实现了计算机视觉算法(最基本的滤波到高级的物体检测皆有涵盖)。
全栈程序员站长
2022/11/09
10.1K0
opencv使用教程_opencv使用教程
【OpenCV】Chapter1.图像的基本操作
扩展使用: 可以通过cv2.namedWindow和cv2.resizeWindow来指定窗口显示尺寸。
zstar
2022/09/21
1K0
opencv的imread函数_opencv imwrite
Mat imread(const String& filename,int flags = IMREAD_COLOR);
全栈程序员站长
2022/11/04
6170
【从零学习OpenCV 4】图像中添加高斯噪声
经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍《从零学习OpenCV 4》。为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通,提前在公众号上连载部分内容,请持续关注小白。
小白学视觉
2019/12/24
3.9K0
【从零学习OpenCV 4】图像中添加高斯噪声
【从零学习OpenCV 4】图像中添加椒盐噪声
经过几个月的努力,小白终于完成了市面上第一本OpenCV 4入门书籍《从零学习OpenCV 4》。为了更让小伙伴更早的了解最新版的OpenCV 4,小白与出版社沟通,提前在公众号上连载部分内容,请持续关注小白。
小白学视觉
2019/12/24
2.2K0
【从零学习OpenCV 4】图像中添加椒盐噪声
matlab的imread怎么用_imread函数参数的含义
函数语法 A = imread(filename, fmt) [X, map] = imread(…)
全栈程序员站长
2022/11/04
2.4K0
python3随笔-opencv读取图像
[[[200 228 197] [200 228 197] [200 228 197] ... ... [200 228 197] [200 228 197] [200 228 197]]]
py3study
2020/01/03
7890
openCV._imread opencv
近日,开始学习图像处理,思前想后决定以opencv作为实验基础。遂完成图片读取和显示功能。Imread作为常用的图像读取函数,虽然简单,但是参数的选择非常重要,直接影响到后期处理。同时在调试学习过程中也可以学习到图像处理的知识。 1. 函数原型
全栈程序员站长
2022/11/07
6330
相关推荐
☀️Python+opencv常用函数☀️
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验