OpenCV 写图像也有讲究,取经之路第 5 天
今天是持续写作的第 37 / 100 天。
如果你有想要交流的想法、技术,欢迎在评论区留言。
本篇文章与你一起学一个方法 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,第三个参数表示的是压缩级别。
存盘标识具体内容如下:
cv2.CV_IMWRITE_JPEG_QUALITY
设置图片格式为.jpeg 或者.jpg 的图片质量,其值为 0—100(数值越大质量越高),默认 95;cv2.CV_IMWRITE_WEBP_QUALITY
设置图片的格式为.webp 格式的图片质量,值为 0–100;cv2.CV_IMWRITE_PNG_COMPRESSION
设置.png 格式的压缩比,其值为 0–9(数值越大,压缩比越大),默认为 3。
测试一段代码如下,读取图片,保存图片。
import cv2
img = 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 cv2
import 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 图像写入相关的知识点,你掌握了吗?
空闲之余,可以订阅橡皮擦的爬虫百例课程学习爬虫知识。
如果你想跟博主建立亲密关系,可以关注同名公众号 梦想橡皮擦,近距离接触一个逗趣的互联网高级网虫。
博主 ID:梦想橡皮擦,希望大家点赞、评论、收藏。
- 点赞
- 收藏
- 关注作者
评论(0)