![计算机视觉应用与实战](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=1739023098-BoTHcVtnzdgW4TBvDrc6ZV3fgZUEMsCM-0-ea47c586aaab2747c5fa8579a22a4028)
3.实验步骤
创建源码文件test01_imwrite_opencv.py。
按照如下步骤编写代码。
步骤一:导入模块
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_31_1.jpg?sign=1739023098-edJEXD1DtMhcvgEYCM3jM32wK6Bvod5b-0-b491a18059ee7035578267f4642e0eb5)
步骤二:使用OpenCV保存uint8类型的图像
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_31_2.jpg?sign=1739023098-Jm56Gi6QMzTCMHccsCgrLVtK85nnezc5-0-1944238c9a2dbf685ae80eb575f6cfae)
步骤三:使用OpenCV保存float64类型的图像
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_31_3.jpg?sign=1739023098-ilhxQGHTMlPgaXcE1qyLVPRYEWCHJbHS-0-4d63582e82ecbb8c1541b874789192d9)
步骤四:使用OpenCV保存由float64类型转换为uint8类型的图像
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_31_4.jpg?sign=1739023098-udAVEqTak5wutmJOQ27GYVjlLUUyqlwQ-0-fb65a7e4de912e32f00ff9d436affe50)
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_32_1.jpg?sign=1739023098-Z3rsEzhTqglbCwzC4Y2TNBQGcFVbaozg-0-9a748f29eb1b5d9402f108fb8206a088)
步骤五:运行实验代码
使用如下命令运行实验代码。
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_32_2.jpg?sign=1739023098-FhWjofEjngNrvFiYIWJcTlIlW17lqxGg-0-a44b3a17c8429770dfec6b2e5997365e)
运行效果分别如图1.7~图1.9所示。
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_32_3.jpg?sign=1739023098-pWepBfKEC6lR8G8UEE9M2kzdvAw5ReD2-0-7fd8722c0d3e215bd4e01ec049d64d13)
图1.7 使用OpenCV保存uint8类型的图像
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_32_4.jpg?sign=1739023098-TTo17yU89yLV1fKMzgIVAHq07n6Wz4g6-0-f6fff7c6a73436a3fe45d95159a7c393)
图1.8 使用OpenCV保存float64类型的图像
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_32_5.jpg?sign=1739023098-QnkSoBWn7fddbaCTa5qf1D6q5FzHnnYo-0-8a4bc668aa39ac11db189d57f18f2930)
图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=1739023098-H9nMMQ2kBX4M40awzMuoPbFcEMbSR6J4-0-bdd948c01a1cad3042ca5c1f2d978014)
3.实验步骤
创建源码文件test02_imsave_matplotlib.py。
按照如下步骤编写代码。
步骤一:导入模块
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_33_2.jpg?sign=1739023098-D0Cx0RhU0xBFS8gzDKeTi6VMEhSSV7Hw-0-39b6121714d0ea24acda3ee671f0d04a)
步骤二:使用Matplotlib保存uint8类型的图像
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_33_3.jpg?sign=1739023098-fzg0uLD3oDQXBbN5CZy69HNU0vY7qEkl-0-f4830afa26cee7db89cddd85d37f1509)
步骤三:使用Matplotlib保存float64类型的图像
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_34_1.jpg?sign=1739023098-CLdvhdhnukPyHKV6DSlU137iuG8Qne9j-0-ac1c5df45fcdb189da4f0823087b12c8)
步骤四:运行实验代码
使用如下命令运行实验代码。
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_34_2.jpg?sign=1739023098-s1BTOsD09PFm0OXrfxwhke6Qnspcvw5x-0-e9b6440c683cd5be51cd7a81c26e196f)
运行效果分别如图1.10和图1.11所示。
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_34_3.jpg?sign=1739023098-L1yrTHEWXOsQttjeV0hKwm3MBvLq9QqW-0-a8dcc3c503653caa07054160b342a06a)
图1.10 使用Matplotlib保存uint8类型的图像
![](https://epubservercos.yuewen.com/254F10/23950114009720806/epubprivate/OEBPS/Images/43251_34_4.jpg?sign=1739023098-zTMYuFDuvDGO52yYlddUUDHa8kURoH8H-0-9e43b5bfbca68815f722df17effa3755)
图1.11 使Matplotlib保存float64类型的图像
可见,使用OpenCV和Matplotlib保存的图像在颜色方面存在差异。使用OpenCV保存的float64类型的图像,再次读取出来时图像存在失真现象。