- 计算机视觉应用与实战
- 韩少云等编著
- 786字
- 2022-08-16 14:46:26
1.3 图像保存
1.3.1 使用OpenCV保存图像
在OpenCV中,可以使用cv2.imwrite(dir,img)函数来保存图像。
第一个参数dir是图像存储的位置。
第二个参数img是图像对象。
该函数用于将ndarray(numpy数组)对象保存成图像文件,并返回保存结果。在默认情况下,该函数的保存结果为8位单通道图像和BGR图像。
1.3.2 使用Matplotlib保存图像
在Matplotlib中,可以使用matplotlib.pyplot.imsave(dir,img,**kwargs)函数来保存图像。
第一个参数dir是图像存储的位置。
第二个参数img是图像对象。
第三个参数**kwargs是一个字典参数,内容较多,下面总结了几个常用的参数值。
·format:指明图像格式,可能的格式有png、pdf、svg、etc,支持大多数图像格式。
·dpi:分辨率,用于调整图像的清晰度。
·cmap:颜色映射,对于彩色图像此参数被忽略,只对灰度图像有效。
1.3.3 案例实现——使用OpenCV保存图像
1.实验目标
使用OpenCV读取一张uint8类型的图像,查看不同数据类型下图像的显示效果并保存。
2.实验环境
实验环境如表1.5所示。
表1.5 实验环境
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_30_1.jpg?sign=1739007655-7PVRg7DkrUWRvdtkDuLxTCewujk8nGVb-0-086e1c310fcaeecf7cce34996e152f39)
3.实验步骤
创建源码文件test01_imwrite_opencv.py。
按照如下步骤编写代码。
步骤一:导入模块
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_31_1.jpg?sign=1739007655-WepLcjlWGeudGPgjj8RxiP3wnGQaBZz7-0-697605750793a2cb5e9a83cb97c27313)
步骤二:使用OpenCV保存uint8类型的图像
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_31_2.jpg?sign=1739007655-6Z49YzfZTjlr45W7gxmaEMQuhXHVVyLT-0-868ecfe49ff5a55a4d69c2448009017d)
步骤三:使用OpenCV保存float64类型的图像
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_31_3.jpg?sign=1739007655-HAGxqXvieWfxwT19zR60TdirvY5JIKjr-0-4e787466031b66e8ac5880304de9a93b)
步骤四:使用OpenCV保存由float64类型转换为uint8类型的图像
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_31_4.jpg?sign=1739007655-sEaJRI247bkAySxJ8Hh41HXObSetr7DU-0-e6ee6cacec4143088939bd9a2d2b0648)
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_32_1.jpg?sign=1739007655-5F4lJWMEpZHZf5gIO1S5hV7abpHrrRbK-0-4ab49ca853bb3c41c3e752586a7c5f6d)
步骤五:运行实验代码
使用如下命令运行实验代码。
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_32_2.jpg?sign=1739007655-g7JqtL1lMXjTL1FEu8fiuT59gFXnjFhv-0-68e6cb4b91bc5a28e50000bbecad3a6f)
运行效果分别如图1.7~图1.9所示。
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_32_3.jpg?sign=1739007655-IdehRRZsLWcLXuMO4CP1oZ6U1sMet6kO-0-0d65cc4c3e5b2ba7bfb1399fb4116aaa)
图1.7 使用OpenCV保存uint8类型的图像
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_32_4.jpg?sign=1739007655-mtnWzqgpfEQy6MzexiYZFTRJmrmyrJel-0-2439e16a8e1a0eed5828aaf621bc4992)
图1.8 使用OpenCV保存float64类型的图像
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_32_5.jpg?sign=1739007655-m8kqabtrZzsqHsecrcZMQ6bXWaTCLg3T-0-f30872f42b51698d0f65f06271a12c95)
图1.9 使用OpenCV保存由float64类型转换为uint8类型的图像
1.3.4 案例实现——使用Matplotlib保存图像
1.实验目标
使用Matplotlib读取一张uint8类型的图像,分别使用不同的数据类型显示图像并保存。
2.实验环境
实验环境如表1.6所示。
表1.6 实验环境
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_33_1.jpg?sign=1739007655-8QwF7DM8Jt3EYP2yXdqc3tnA4gLwQuh9-0-f17225a0a007c29ed3c04f7fc3a569b5)
3.实验步骤
创建源码文件test02_imsave_matplotlib.py。
按照如下步骤编写代码。
步骤一:导入模块
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_33_2.jpg?sign=1739007655-bZPqlQNczepFZmlMWvtlZGL3qqhW7YEv-0-ec5bbaeb9c376f435d6cf972cdb5c1da)
步骤二:使用Matplotlib保存uint8类型的图像
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_33_3.jpg?sign=1739007655-ijgCyRNxwGUrcOqZrob1wMTd7zI1IgGR-0-b508639dae607fe0b2adc85544a0d47a)
步骤三:使用Matplotlib保存float64类型的图像
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_34_1.jpg?sign=1739007655-s1FqpzAGyvWQ1ykFJS3zkMZht4FqsOok-0-9a416bc5ad9e5c6a48e222b5019fdce5)
步骤四:运行实验代码
使用如下命令运行实验代码。
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_34_2.jpg?sign=1739007655-gbjQcznqnJK92B5lrP4ZVH2dfqYFBqIx-0-ee8318db4950934400488594c1262e3f)
运行效果分别如图1.10和图1.11所示。
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_34_3.jpg?sign=1739007655-WVvyRNVdSFXOBl02GH4wSiI2cx4PGPzH-0-d364f85fad4ec05655cad607af825e69)
图1.10 使用Matplotlib保存uint8类型的图像
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_34_4.jpg?sign=1739007655-XYVfwvzQ5EmP6ad9Z9utXalYJ13tmkhM-0-b0c964b865a7c4e51d5fd2f90e1ed9bb)
图1.11 使Matplotlib保存float64类型的图像
可见,使用OpenCV和Matplotlib保存的图像在颜色方面存在差异。使用OpenCV保存的float64类型的图像,再次读取出来时图像存在失真现象。