- OpenCV4应用开发:入门、进阶与工程化实践
- 贾志刚 张振
- 789字
- 2024-02-27 11:25:32
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=1739413164-QzmryuD6DanL7OEynkhed1MhlGOG9t3V-0-4170ff467a2827a8d7d5ee5d3deba213)
在不修改第二个参数flags默认值的情况下,经常像如下这样使用该函数:
![](https://epubservercos.yuewen.com/B38852/28614119404948506/epubprivate/OEBPS/Images/23_03.jpg?sign=1739413164-3rczf6u2tT0yHQ7cC1zcNFxp9HKWuVZa-0-40fb3cc44d43d97fdb3b456945b7d0b8)
如果需要把图像以灰度图像的形式进行加载,则可以进行以下设置:
![](https://epubservercos.yuewen.com/B38852/28614119404948506/epubprivate/OEBPS/Images/24_01.jpg?sign=1739413164-9DZ96BOqCNGSrGai3QL3GfWqwm58KmBd-0-2e3cec45a50a40e80e6048e1f3796b41)
如果需要把具有透明通道的图像加载进来但不做任何改变,则可以进行以下设置:
![](https://epubservercos.yuewen.com/B38852/28614119404948506/epubprivate/OEBPS/Images/24_02.jpg?sign=1739413164-MCY2wowdnWOg0xHoOjCgik9F4UnPKnup-0-0e25d0cabd94987dfdcb7097f2d897c2)
1.5.2 保存图像
一般情况下,通过imwrite函数保存图像只需设置保存文件路径与Mat对象两个参数,但是实际上该函数还有第三个默认参数可以设置。第三个参数主要用于调整保存图像的压缩质量、位图深度和通道数目。如果需要修改默认保存的三通道彩色图像,开发者就要使用第3个参数对要保存的图像进行有针对性的写入图像文件操作。首先需要重新认识一下imwrite函数:
![](https://epubservercos.yuewen.com/B38852/28614119404948506/epubprivate/OEBPS/Images/24_03.jpg?sign=1739413164-JuKjCjhA5ZaETn8zicWLU2iSOiu8Tte7-0-1d4cf8ac79ef087a65edf6299dc0bf2e)
参数解释如下。
❑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=1739413164-EUntxXT88Kvb6FEGrKHN4b7A4QAmYhT0-0-3ec78d4af33a45cd0e30302f8de87d1b)
![](https://epubservercos.yuewen.com/B38852/28614119404948506/epubprivate/OEBPS/Images/25_01.jpg?sign=1739413164-e1be2ClgnqbQV6NnEXvfg8PU1vM5QwFW-0-49e4fdeada72c9a273a9b113e0c5842a)
2)保存为默认的彩色BGR图像:
![](https://epubservercos.yuewen.com/B38852/28614119404948506/epubprivate/OEBPS/Images/25_02.jpg?sign=1739413164-z1oBbO4h4mkLEe3VozvhFDgAUniitoLO-0-ca314ede2076aa02831245a7bad1eff3)
3)保存为PNG彩色压缩图像:
![](https://epubservercos.yuewen.com/B38852/28614119404948506/epubprivate/OEBPS/Images/25_03.jpg?sign=1739413164-DRY8c3mKg78yH6LvWj4u0f6yJcx4PnTs-0-5e9dd6e5148131a1b072a3bca559b3f8)
4)保存为JPG高压缩比图像:
![](https://epubservercos.yuewen.com/B38852/28614119404948506/epubprivate/OEBPS/Images/25_04.jpg?sign=1739413164-4wfdA4Fh08OZWMUoHMze3kHnMI06w1Qs-0-db1cfab05933380cb1b38c2aa7d37744)
5)保存为PNG格式,且带透明通道:
![](https://epubservercos.yuewen.com/B38852/28614119404948506/epubprivate/OEBPS/Images/25_05.jpg?sign=1739413164-J3u0YUTffExxs7cmOTtosVdxLREgDTpO-0-0b31deedc2053c197a6119987038d43f)
注意:使用imread与imwrite两个函数进行图像读写的时候,特别需要注意默认的最后一个参数。这些参数可以帮助开发者有效实现各种图像加载与压缩保存需求。