写点什么

OpenCV 写图像也有讲究,取经之路第 5 天

发布于: 2021 年 03 月 21 日
OpenCV 写图像也有讲究,取经之路第 5 天

本篇文章与你一起学一个方法 imwrite



OpenCV 保存图像


读取图像之后,对应的就是保存图像,在 OpenCV 里面,保存图像也有讲究。


在 C++语言里面,OpenCV 函数结构如下:


CV_EXPORTS_W bool imwrite( const String& filename, InputArray img,              const std::vector<int>& params = std::vector<int>());
复制代码


  • 参数一: const String& filename 表示需要写入的文件名,必须要加上后缀,比如 test.jpg

  • 参数二:InputArray img 表示 Mat 类型的图像数据;

  • 参数三:const std::vector& params 表示为特定格式保存的参数编码,它有一个默认值 std::vector< int >(),所以一般情况下不用写。


以上内容,在 Python 中同样适用,Python 的语法格式如下。


# cv2.imwrite(存储路径,图像矩阵[,存盘标识])cv2.imwrite(filename, img[, params])
复制代码


  • 参数一:保存的路径及文件名;

  • 参数二:图像矩阵;

  • 参数三:针对特定的格式的存盘标识,对于 JPEG,其表示的是图像的质量,用 0-100 的整数表示,默认为 95。对于 PNG,第三个参数表示的是压缩级别。


存盘标识具体内容如下:


  1. cv2.CV_IMWRITE_JPEG_QUALITY 设置图片格式为.jpeg 或者.jpg 的图片质量,其值为 0---100(数值越大质量越高),默认 95;

  2. cv2.CV_IMWRITE_WEBP_QUALITY 设置图片的格式为.webp 格式的图片质量,值为 0--100;

  3. cv2.CV_IMWRITE_PNG_COMPRESSION 设置.png 格式的压缩比,其值为 0--9(数值越大,压缩比越大),默认为 3。


测试一段代码如下,读取图片,保存图片。


import cv2img = cv2.imread("maoyan.jpg",0)
# cv2.imshow("maoyan.png",img)# imwrite 保存图片cv2.imwrite("maoyan_grayscale.jpg", img)cv2.waitKey(0)cv2.destroyAllWindows()
复制代码


成功保存一张灰度图。

还有一个可以查阅一下上面两张图的属性,在查看一些图像上的属性数据。

对于 jpg 格式的文件,imwrite 中第三个参数是设置图片质量,范围从 1~100,默认 95,越大画质越好,文件越大。


cv2.imwrite("maoyan_3.jpg", img, (cv2.IMWRITE_JPEG_QUALITY, 5))
复制代码


整理就是质量越高,图片越清楚,质量越低,图片越模糊,但是图片占用空间变小。

其余的用法可以继续参考 官方手册 学习。


在检索第三方资料的时候,发现很多博主都写了下面一句话。


注意,cv2.IMWRITE_JPEG_QUALITY类型为 Long,必须转换成int。
复制代码


橡皮擦实际试了一下,发现并不是 Long,如果有博友发现是其它原因,欢迎在评论区交流。(而且在 Python3 中已经移除掉 long 类型了)



imwrite 的坑


在学习过程中,imwrite 还真存在两个需要特别注意的地方,第一个就是中文路径问题,这个在很多编程场景中都存在。


先说读取,读取的时候也存在该问题。


import cv2import numpy as np# img = cv2.imread("./imgs/maoyan.jpg",-1)img = cv2.imdecode(np.fromfile("./图像/maoyan.jpg",dtype=np.uint8),-1)
cv2.imshow("maoyan.png",img)
复制代码


写入文件解决中文路径的问题,在测试的时候发现的第二个问题,如果目录文件不存在,OpenCV 不会自动创建目录。


# 保存图片中文路径问题cv2.imencode('.jpg',img)[1].tofile("./图像_目录不存在/maoyan2.jpg")
复制代码


今天的 OpenCV 尾声


1 个小时又过去了,对 Python OpenCV 图像写入相关的知识点,你掌握了吗?


空闲之余,可以订阅橡皮擦的爬虫百例课程学习爬虫知识。


**想学 Python 爬虫,可以订阅橡皮擦专栏哦~** 🈲🈲🈲🈲 点击发现惊喜 🈲🈲🈲🈲




博主 ID:梦想橡皮擦,希望大家<font color="red">点赞</font>、<font color="red">评论</font>、<font color="red">收藏</font>。


发布于: 2021 年 03 月 21 日阅读数: 8
用户头像

爬虫 100 例作者,蓝桥签约作者,博客专家 2021.02.06 加入

6 年产品经理+教学经验,3 年互联网项目管理经验; 互联网资深爱好者; 沉迷各种技术无法自拔,导致年龄被困在 25 岁; CSDN 爬虫 100 例作者。 个人公众号“梦想橡皮擦”。

评论

发布
暂无评论
OpenCV 写图像也有讲究,取经之路第 5 天