《计算机视觉算法:基于OpenCV的计算机应用开发》 —2.6 图像读写

举报
华章计算机 发表于 2020/02/15 13:48:40 2020/02/15
【摘要】 本节书摘来自华章计算机《计算机视觉算法:基于OpenCV的计算机应用开发》 一书中第2章,第2.6节,作者是[伊朗] 阿明·艾哈迈迪·塔兹赫孔迪(Amin Ahmadi Tazehkandi) ,陈靖 杨欣 译。

2.6 图像读写

OpenCV允许使用imread函数从磁盘读取一个图像到Mat对象,我们在本章前面的例子中简单使用过这个函数。imread函数接受被读取的图像的文件名和flag两个参数,并返回用读取的图像构建的Mat对象。图像文件必须符合OpenCV所支持的图像格式。此处列出OpenCV支持的常用格式:

  • Windows位置:*.bmp, *.dib。

  • JPEG文件:*.jpeg, *.jpg, *.jpe。

  • 便携式网络图像格式:*.png。

  • 便携式图像格式:*.pbm, *.pgm, *.ppm, *.pxm, *.pnm。

  • TIFF文件:*.tiff, *.tif。

一定要时常查看OpenCV的文档和更新列表,特别是在某些操作系统上的一些图像格式的异常情况和注意事项。

对于flag参数,它可以是一个或几个在OpenCV中定义的ImreadModes枚举值的组合。以下是一些使用最广泛的条目,它们的含义从名字就可看出。

  • IMREAD_UNCHANGED。

  • IMREAD_GRAYSCALE。

  • IMREAD_COLOR。

  • IMREAD_IGNORE_ORIENTATION。

例如,下面的代码可以用来从磁盘读取图像,而不需要读取存储在图像EXIF数据中的方向值,并且把图像转换成灰度图:

 image.png

可交换图像文件格式(EXchangeable Image File format,EXIF)是专为数码相机的照片定制的标准,它添加了标签和附加数据(元数据)。标签中可能包含了生产商,相机模型和照片的方向信息。OpenCV能够读取并理解这些标签(比如方向信息),也可以像上面的代码那样,忽略它们。

读取图像后,可以调用empty函数来检查是否读取成功。你也可以通过channels函数获取通道数,用depth函数获取像素深度,以及用type函数获取图像类型等。另外,也可以像我们在本章前面看到的那样,调用imshow函数来显示图像。

同样,imreadmulti函数可读取多页图像为一组Mat对象的向量。这里显著不同在于imreadmulti返回一个bool值来检测页面是否被成功读取,并以引用的方式传递给vector<Mat>对象。

imwrite函数可用来把一个图像写入磁盘上的一个文件。imwrite函数的输入参数包括要写入的文件名、Mat对象和一个包含写入操作参数的整数向量。这个向量在取默认值的情况下可忽略。下面是OpenCV中完整的参数枚举值列表,这些参数可用于imwrite函数以更改写入进程的行为。

  • ImwriteFlags。

  • ImwriteEXRTypeFlags。

  • ImwritePNGFlags。

  • ImwritePAMFlags。

下面的代码例子描述了如何把Mat对象写入图像文件并保存到磁盘。注意此例中的图像格式是由提供的文件扩展名得到的,这里是png:

 image.png

除了使用imread和imwrite函数在磁盘中读写图像,也可以使用imdecode和imencode函数来读写存储在内存缓冲区中的图像。这两个函数留给读者自行研究,我们将继续下一个主题,即使用OpenCV实现视频读写。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。