您的位置:首页 > 运维架构

凡哥OpenCV基础入门教程(跳一跳专题)-CH1.4-图片保存imwrite

2018-03-16 21:04 483 查看
原创作品,转载请注明出处!!

0. 概要

在之前的HighGUI展示图片的课程中, 凡哥没有讲解图像保存的问题. 图像的保存, 我们需要使用imwrite 函数.
凡哥给大家讲解了如何保存jpg格式与png格式的图片, 以及他们的压缩质量/压缩等级的设定.

1. 图像的简单保存

这次我们读入的还是小猫. &:-)老面孔

0119_cat.jpg我们在读入img之后, 对图像进行各种操作, 例如图像均衡, 图像绘制等. 接下来, 直接使用
imwrite
函数, 第一个参数
./cat2.png
是即将保存的文件路径与文件名. 因为我在Ubuntu下, 所以文件路径会使用斜杠
/
, 函数的第二个参数就是图像矩阵
img
.
CH1.4_ImageWriteToPNG.py
1import numpy as np
2import cv2
3
4# 导入一张图像 模式为彩色图片
5img = cv2.imread('cat.jpg', cv2.IMREAD_COLOR)
6
7# 读入灰度图
8cv2.imwrite('./cat2.png', img)
具体保存为什么图像格式, 是根据图像路径名字的后缀去判断的, 后缀为
.png
就保存为
png
格式的图片. 哈哈, 凡哥猜到你已经会保存
JPEG
格式的图片啦. 知识充电站: jpg 跟 jpeg其实是一个东西, jpg是jpeg的简称. jpeg是Joint Photographic Experts Group(联合图像专家小组)的缩写
CH1.4_ImageWriteToJPG.py
1import numpy as np
2import cv2
3
4# 导入一张图像 模式为彩色图片
5img = cv2.imread('cat.jpg', cv2.IMREAD_COLOR)
6
7# 保存为PNG图片
8cv2.imwrite('./cat3.jpg', img)
关于 JPEG, PNG等格式之间图片的差异, 可以查阅知乎文章 jpg和png有什么区别?

2. 图像的压缩保存

图像的保真度, 靠
imwrite
函数的第三个参数来指定.第三个参数, 针对不同的图片保存类型, 对应的含义也有所不同.在图像压缩的演示里, 我们采用棕熊的图片.

bear

2.1 JPEG压缩保存

JPEG
的第三个参数所代表的意思是图像质量
cv2.IMWRITE_JPEG_QUALITY
, 取值范围在 0-100, 默认是95.
1cv2.imwrite('http://image.myfange.com/bear_quality_50.jpg', img, [cv2.IMWRITE_JPEG_QUALITY, 50])
我们将质量度分成10段 展示一下各种质量度下的图片.
CH1.4_ImageWriteToJPGQuality.py
1import numpy as np
2import cv2
3
4# 导入一张图像 模式为彩色图片
5img = cv2.imread('http://image.myfange.com/bear.jpg', cv2.IMREAD_COLOR)
6
7for quality in range(0, 100, 10):
8
9    # 保存为PNG图片
10    cv2.imwrite('http://image.myfange.com/bear_quality_{}.jpg'.format(quality), img, [cv2.IMWRITE_JPEG_QUALITY, quality])


Screenshot_20180121_220953.png图像大小对比.

Screenshot_20180121_221320.png

2.2 PNG压缩保存

PNG对应的称之为压缩级别
cv2.IMWRITE_PNG_COMPRESSION
压缩级别的取值范围从0到9. 0 代表无压缩, 9代表最大压缩.例如我们使用压缩级别4去存储图片, 就可以这么写.
1cv2.imwrite('http://image.myfange.com/bear_compression_4.png', img, [cv2.IMWRITE_PNG_COMPRESSION, 4])
凡哥写个程序, 让大家直观的感受到不同压缩级别的效果.
CH1.4_ImageWriteToPNG_Compression.py
1import numpy as np
2import cv2
3
4# 导入一张图像 模式为彩色图片
5img = cv2.imread('http://image.myfange.com/bear.png')
6
7for cmpi in range(0, 10):
8    # 保存为PNG图片
9    cv2.imwrite('http://image.myfange.com/bear_compression_{}.png'.format(cmpi), img, [cv2.IMWRITE_PNG_COMPRESSION, cmpi])
10    print("压缩级别 {}".format(cmpi))


Screenshot_20180121_213701.png说实话,打开图片看清晰度,我们肉眼非常难看到有啥区别,不过我们可以通过文件属性文件大小来体现出来.

Screenshot_20180121_214659.png
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐