![OpenCV4应用开发:入门、进阶与工程化实践](https://wfqqreader-1252317822.image.myqcloud.com/cover/551/48899551/b_48899551.jpg)
1.5 图像加载与保存
本节将重新审视OpenCV中的图像加载函数imread,同时学习如何通过imwrite函数保存图像。
1.5.1 加载图像
OpenCV使用imread函数实现图像的加载,该函数支持灰度图像、彩色图像、原始图像的加载。在默认情况下,通过imread加载的图像都是三通道BGR彩色图像。实际上,OpenCV支持加载灰度图像与带有透明通道的图像。imread函数原型如下所示:
![](https://epubservercos.yuewen.com/B38852/28614119404948506/epubprivate/OEBPS/Images/23_02.jpg?sign=1739282268-v1t6ZfTtOWkyjmHqsdNR2b8SrNhXF9ub-0-bead727ae19bfc46a3846dc9d63158ea)
在不修改第二个参数flags默认值的情况下,经常像如下这样使用该函数:
![](https://epubservercos.yuewen.com/B38852/28614119404948506/epubprivate/OEBPS/Images/23_03.jpg?sign=1739282268-NNr4PJMjULW0iJH378ftd9561Kkn0fEc-0-50e061257bd3e678fc53217eade45051)
如果需要把图像以灰度图像的形式进行加载,则可以进行以下设置:
![](https://epubservercos.yuewen.com/B38852/28614119404948506/epubprivate/OEBPS/Images/24_01.jpg?sign=1739282268-Iy4d3bZB69rLasBJFTiYClmGQQzkchoG-0-8b9ca13da62663d2bb50191ad488fd67)
如果需要把具有透明通道的图像加载进来但不做任何改变,则可以进行以下设置:
![](https://epubservercos.yuewen.com/B38852/28614119404948506/epubprivate/OEBPS/Images/24_02.jpg?sign=1739282268-VotucG9Xwj5UvWqWJBHkS04i0CIauUwj-0-1bea0e6e4046ab482eb0f55f0b82d0f6)
1.5.2 保存图像
一般情况下,通过imwrite函数保存图像只需设置保存文件路径与Mat对象两个参数,但是实际上该函数还有第三个默认参数可以设置。第三个参数主要用于调整保存图像的压缩质量、位图深度和通道数目。如果需要修改默认保存的三通道彩色图像,开发者就要使用第3个参数对要保存的图像进行有针对性的写入图像文件操作。首先需要重新认识一下imwrite函数:
![](https://epubservercos.yuewen.com/B38852/28614119404948506/epubprivate/OEBPS/Images/24_03.jpg?sign=1739282268-NCng0k3QPJVlUuW0qUk42MDLjsmsRB0i-0-df128b16ba614221a6a778107a044d5b)
参数解释如下。
❑filename:表示保存文件的路径与名称,必须带图像文件扩展名。
❑img:内存中的Mat对象。
❑params:保存图像文件时需要优化的参数,默认为空。
对第3个参数params来说,当以不同的格式保存图像时,params参数的内容也是不一样的。
1)如果保存图像的格式为PNG,则调整压缩质量的参数为IMWRITE_PNG_COMPR-ESSION。该参数等级取值范围为0~9,默认值为1。值越大,压缩时间越长,图像大小越小。
2)如果保存图像的格式为JPG,则调整压缩质量的参数为IMWRITE_JPEG_QUALITY:等级取值范围为0~100,默认值为95。值越大,图像质量越高,图像大小也越大。
常见的不同通道与格式的图像保存代码如下。
1)保存为单通道灰度图像:
![](https://epubservercos.yuewen.com/B38852/28614119404948506/epubprivate/OEBPS/Images/24_04.jpg?sign=1739282268-X2Oo6ko4SeoAWHKxPZ0tvWF58DthO1AH-0-67cbc3d3bf6fe4a7fc9b35f588d68020)
![](https://epubservercos.yuewen.com/B38852/28614119404948506/epubprivate/OEBPS/Images/25_01.jpg?sign=1739282268-dRv65lTvUfYOYyjCn32C6LfalHvnw6tD-0-dcd1a45c0e0036a519b5d6e388f60a2e)
2)保存为默认的彩色BGR图像:
![](https://epubservercos.yuewen.com/B38852/28614119404948506/epubprivate/OEBPS/Images/25_02.jpg?sign=1739282268-fusy8IFB99s05ObHupNrsuVkKkePHUSw-0-6edc8b2d9e51b82508dc816994fca51d)
3)保存为PNG彩色压缩图像:
![](https://epubservercos.yuewen.com/B38852/28614119404948506/epubprivate/OEBPS/Images/25_03.jpg?sign=1739282268-FfmY9kNA9E974PKfrKenWVJLFW3OkTMF-0-c907ba256826906308a0289fab67dd94)
4)保存为JPG高压缩比图像:
![](https://epubservercos.yuewen.com/B38852/28614119404948506/epubprivate/OEBPS/Images/25_04.jpg?sign=1739282268-p6gIAPSqx9LRgqJzeDroNGjY4Z5J47ra-0-04ab6bd9e8844485644201e83b3a30e6)
5)保存为PNG格式,且带透明通道:
![](https://epubservercos.yuewen.com/B38852/28614119404948506/epubprivate/OEBPS/Images/25_05.jpg?sign=1739282268-rvWMV7EXt00djSqanTjgY2pRK7xGhkLg-0-4054660a367d9afe71550a756744741c)
注意:使用imread与imwrite两个函数进行图像读写的时候,特别需要注意默认的最后一个参数。这些参数可以帮助开发者有效实现各种图像加载与压缩保存需求。