《计算机视觉算法:基于OpenCV的计算机应用开发》 —2.6 图像读写
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数据中的方向值,并且把图像转换成灰度图:
可交换图像文件格式(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:
除了使用imread和imwrite函数在磁盘中读写图像,也可以使用imdecode和imencode函数来读写存储在内存缓冲区中的图像。这两个函数留给读者自行研究,我们将继续下一个主题,即使用OpenCV实现视频读写。
- 点赞
- 收藏
- 关注作者
评论(0)