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

网友投稿 660 2022-05-28

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。

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

IMREAD_COLOR。

IMREAD_IGNORE_ORIENTATION。

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

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

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

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

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

ImwriteFlags。

ImwriteEXRTypeFlags。

ImwritePNGFlags。

ImwritePAMFlags。

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

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

OpenCV

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:C++ 文件读写
下一篇:7天玩转PostgreSQL基础训练营(二)
相关文章