![计算机视觉应用与实战](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=1739249972-0hZuNzn9L6jWaO5WpfkRxriKs3aRpAaX-0-005552eefb9c46440970d453dd6db35c)
3.实验步骤
创建源码文件test01_imwrite_opencv.py。
按照如下步骤编写代码。
步骤一:导入模块
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_31_1.jpg?sign=1739249972-qiEoR6lufOG6CSwrtVl8ONLLbmt7NJbA-0-f7971dfb786f5f236630bc1fb0a3fc7a)
步骤二:使用OpenCV保存uint8类型的图像
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_31_2.jpg?sign=1739249972-o1dNoL2jnycTjfJU4jiDEbNu4JgNU5Km-0-10e0f69a7a4e5af9d70029d55b02d776)
步骤三:使用OpenCV保存float64类型的图像
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_31_3.jpg?sign=1739249972-RcAFtj6y1NQj3AuppOo7UMgerSOCTFlk-0-ccc400c8d775705468d39ecaf4549fa1)
步骤四:使用OpenCV保存由float64类型转换为uint8类型的图像
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_31_4.jpg?sign=1739249972-GHAosSoSETz4XmHBEJtjY5Sb7THqxWCE-0-bef1a05244a8b2096b038590b6857dcb)
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_32_1.jpg?sign=1739249972-xnjEd82Mi976SthY0cO7DGDCkal0KJ1V-0-534d9b73c25490560bc67f9e38a8521c)
步骤五:运行实验代码
使用如下命令运行实验代码。
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_32_2.jpg?sign=1739249972-K1omsKej3ZyMKDlvSXr17vq2WAopUYtX-0-4c63f33f979d7773042005ea28514805)
运行效果分别如图1.7~图1.9所示。
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_32_3.jpg?sign=1739249972-kHtNzymJFESrI6iZn3Cn0UwhBPfPfCcG-0-16b77e1ec12c66156ad5382a427ebf57)
图1.7 使用OpenCV保存uint8类型的图像
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_32_4.jpg?sign=1739249972-sb0JOB4OTIGvJsbVpSA3oJlxYZ0TpHAv-0-a87e0dc552af3ad65f397b5817edc252)
图1.8 使用OpenCV保存float64类型的图像
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_32_5.jpg?sign=1739249972-LnqT3mihyiFGZ0Jm82nkB8zF3is5ioq5-0-40a82c8b35d8158a527ee75e6c0e5268)
图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=1739249972-FxvEceig2RpcxfXmFd0zRtMWbVlpssIV-0-11824a904b9879a50389e255f86e4830)
3.实验步骤
创建源码文件test02_imsave_matplotlib.py。
按照如下步骤编写代码。
步骤一:导入模块
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_33_2.jpg?sign=1739249972-cIDM1D8ERMF3evVCyTU9ylrOxA77VcCp-0-330bcbbf61cc6e52336fbcea8030494c)
步骤二:使用Matplotlib保存uint8类型的图像
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_33_3.jpg?sign=1739249972-Y7Q5ODpK5Tf29kPBb8WpgIiSye2LWLiY-0-ae9b8df63f1942c9f8205350e9963aee)
步骤三:使用Matplotlib保存float64类型的图像
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_34_1.jpg?sign=1739249972-yO0fqxIfSZXXKyH3t62g0C7vu8UBamC4-0-8edef056a217d09c85b050207c935fad)
步骤四:运行实验代码
使用如下命令运行实验代码。
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_34_2.jpg?sign=1739249972-1caiKlU0umHOmSFgr1siWrDLe8L2G6EX-0-240990a6c7c33e49070555bcbf693e1a)
运行效果分别如图1.10和图1.11所示。
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_34_3.jpg?sign=1739249972-6eCrYh832g1yQyQ1lEOj8NkatPWMErzk-0-0e9b2059061a6fbf7e1a5a8425f797a4)
图1.10 使用Matplotlib保存uint8类型的图像
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_34_4.jpg?sign=1739249972-MucK55DQ083SpzC1WqYYlM3On7HatRwQ-0-9441ca2946a699e34e840f0edffd2463)
图1.11 使Matplotlib保存float64类型的图像
可见,使用OpenCV和Matplotlib保存的图像在颜色方面存在差异。使用OpenCV保存的float64类型的图像,再次读取出来时图像存在失真现象。