![计算机视觉应用与实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/543/44819543/b_44819543.jpg)
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=1739278487-kQnmlCG7N9wc1B20wZdRSoBS9Vflu3uk-0-4ae8ea9d4bfc14367db512e42bf2ba4a)
3.实验步骤
创建源码文件test01_imwrite_opencv.py。
按照如下步骤编写代码。
步骤一:导入模块
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_31_1.jpg?sign=1739278487-HBPhwFKHZVTa5p7kADRDNHtbNnR85umH-0-a43493a40d95245d530b31206591c334)
步骤二:使用OpenCV保存uint8类型的图像
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_31_2.jpg?sign=1739278487-0ZSXuICB5h2SBBRy5ZX3iJz8lx67iopf-0-df31ef7ee0d615ef36c6872b9f81ff82)
步骤三:使用OpenCV保存float64类型的图像
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_31_3.jpg?sign=1739278487-wpADYYCamX5nyV4lARZaMhFz9l53Qqng-0-f4c915d6fe83fe4743ad44f39c34d2ae)
步骤四:使用OpenCV保存由float64类型转换为uint8类型的图像
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_31_4.jpg?sign=1739278487-XR2jDlzmf9ixNSAlXPvrd3JGyUYIYxtj-0-23a0165167514fe029c2b23c953b2939)
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_32_1.jpg?sign=1739278487-nSu9ff0TylWQ2UhwJMXsWK2WZc7lutO3-0-a1a69e8987dc2c59f4b09bd745d4bd30)
步骤五:运行实验代码
使用如下命令运行实验代码。
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_32_2.jpg?sign=1739278487-3B3zlzfcnLxEnyS3QwssAoH333RHNfAo-0-fe12bb79a500a322663b07e491049007)
运行效果分别如图1.7~图1.9所示。
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_32_3.jpg?sign=1739278487-aDtoqTKk0OAUgiWpCCJVC05UJ6cRqLGX-0-a7ca4e52790b09ed3a1d99472341da24)
图1.7 使用OpenCV保存uint8类型的图像
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_32_4.jpg?sign=1739278487-8t93608BqYdu2mFC0lt9q8IVS1VNIXPn-0-3ec356d925e66ef469f4f1872502f35b)
图1.8 使用OpenCV保存float64类型的图像
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_32_5.jpg?sign=1739278487-SVdCLo2oVzxDsNlfn27Cl79nujYJJuhw-0-25ab03b436a4f579f8563d5a055452cb)
图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=1739278487-Pm1bbyk5ivutbRo2oQngiwgLUsU4cXmw-0-ee8f1b781315a7c36abddb318f05cbf7)
3.实验步骤
创建源码文件test02_imsave_matplotlib.py。
按照如下步骤编写代码。
步骤一:导入模块
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_33_2.jpg?sign=1739278487-x55rP8pbDceDrrahSwvLKcJap9g0eWn1-0-e7153e19936048b4286117f699de96f7)
步骤二:使用Matplotlib保存uint8类型的图像
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_33_3.jpg?sign=1739278487-AAM1YlUdRiXIZK3yZYlaGgczbl6NT88U-0-a10436f4f4bd02e61f1d6c306d49a7d0)
步骤三:使用Matplotlib保存float64类型的图像
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_34_1.jpg?sign=1739278487-1VztRV2m2obKlVcTjTmp4cO3FNDFU6pl-0-cfe4e5a9e5f0fcd456c8e8aface66bea)
步骤四:运行实验代码
使用如下命令运行实验代码。
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_34_2.jpg?sign=1739278487-X8NXnNNNEz0e17ltoh1jRKoLcFbTApr8-0-5b30be524d73ef1884e7dbbca3c6725f)
运行效果分别如图1.10和图1.11所示。
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_34_3.jpg?sign=1739278487-lDIO7jBr8QVOmmiVUZw7aNMvstIxQJRp-0-9c0e98c4a4b3b5adb4182800b88ad2ba)
图1.10 使用Matplotlib保存uint8类型的图像
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_34_4.jpg?sign=1739278487-JNAzQVylFtg0Rg8H8dFMcV7OmTtzt9cq-0-3edaedaa2a900af07ab2b5a0f3e35e09)
图1.11 使Matplotlib保存float64类型的图像
可见,使用OpenCV和Matplotlib保存的图像在颜色方面存在差异。使用OpenCV保存的float64类型的图像,再次读取出来时图像存在失真现象。