python cv2图像质量压缩的算法示例


Posted in Python onJune 04, 2021

使用opencv对图像进行编码,一方面是图像二进制传输的需要,另一方面对图像压缩。以jpeg压缩为例:

1、转为二进制编码

img = cv2.imread(img_path)
# 取值范围:0~100,数值越小,压缩比越高,图片质量损失越严重
params = [cv2.IMWRITE_JPEG_QUALITY, ratio]  # ratio:0~100
msg = cv2.imencode(".jpg", img, params)[1]
msg = (np.array(msg)).tobytes()
print("msg:", len(msg))

对于png压缩,改为:

# 取值范围:0~9,数值越小,压缩比越低,图片质量越高
params = [cv2.IMWRITE_PNG_COMPRESSION, ratio]  # ratio: 0~9
msg = cv2.imencode(".png", img, params)[1]
msg = (np.array(msg)).tobytes()

对于图像解码,使用imdecode即可解为numpy类型图像:

img = cv2.imdecode(np.frombuffer(msg, np.uint8), cv2.IMREAD_COLOR)
print(img.shape, type(img))

2、图像质量压缩

原图(48k):

python cv2图像质量压缩的算法示例

jpg压缩:

img_path = r"E:\img.jpg"
img = cv2.imread(img_path)
cv2.imwrite(r"E:\ret_80.jpg", img, [cv2.IMWRITE_JPEG_QUALITY, 80])
cv2.imwrite(r"E:\ret_40.jpg", img, [cv2.IMWRITE_JPEG_QUALITY, 40])
cv2.imwrite(r"E:\ret_10.jpg", img, [cv2.IMWRITE_JPEG_QUALITY, 10])
cv2.imwrite(r"E:\ret_0.jpg", img, [cv2.IMWRITE_JPEG_QUALITY, 0])

结果:

python cv2图像质量压缩的算法示例

压缩后图像大小依次为:49.6K、25.6K、11K、5.02K。jpg压缩明显,压缩到极致时颜色信息损失严重。

png压缩:

img_path = r"E:\img.jpg"
img = cv2.imread(img_path)
cv2.imwrite(r"E:\ret_0.png", img, [cv2.IMWRITE_PNG_COMPRESSION, 0])
cv2.imwrite(r"E:\ret_3.png", img, [cv2.IMWRITE_PNG_COMPRESSION, 3])
cv2.imwrite(r"E:\ret_6.png", img, [cv2.IMWRITE_PNG_COMPRESSION, 6])
cv2.imwrite(r"E:\ret_9.png", img, [cv2.IMWRITE_PNG_COMPRESSION, 9])

结果:

python cv2图像质量压缩的算法示例

压缩后图像大小依次为:675K、364K、364K、360K。png格式偏大,压缩率调到最高也还有360K,且成像上无明显变化。

PS:也可以对图像压缩后保存,如:

img_path = r"E:\img.jpg"
img = cv2.imread(img_path)
params = [cv2.IMWRITE_PNG_COMPRESSION, 0]
msg = cv2.imencode(".png", img, params)[1]
msg = (np.array(msg)).tobytes()
print("msg:", len(msg))
img = cv2.imdecode(np.frombuffer(msg, np.uint8), cv2.IMREAD_COLOR)
cv2.imwrite(rr"E:\ret.jpg", img)

bug处理:

早期版本这样写:

msg = (np.array(msg)).tostring()
改为:
msg = (np.array(msg)).tobytes()
 
img = cv2.imdecode(np.fromstring(msg, np.uint8), cv2.IMREAD_COLOR)
改为:
img = cv2.imdecode(np.frombuffer(msg, np.uint8), cv2.IMREAD_COLOR)

到此这篇关于python cv2图像质量压缩的算法示例的文章就介绍到这了,更多相关python cv2图像质量压缩 内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
浅谈python内置变量-reversed(seq)
Jun 21 Python
python 通过xml获取测试节点和属性的实例
Mar 31 Python
Tensorflow卷积神经网络实例进阶
May 24 Python
深入浅析Python传值与传址
Jul 10 Python
python爬取cnvd漏洞库信息的实例
Feb 14 Python
实例详解Python模块decimal
Jun 26 Python
python实现最小二乘法线性拟合
Jul 19 Python
django迁移文件migrations的实现
Mar 31 Python
python 代码实现k-means聚类分析的思路(不使用现成聚类库)
Jun 01 Python
Python+Selenium随机生成手机验证码并检查页面上是否弹出重复手机号码提示框
Sep 21 Python
python 爬虫如何正确的使用cookie
Oct 27 Python
Python还能这么玩之用Python修改了班花的开机密码
Jun 04 Python
高考要来啦!用Python爬取历年高考数据并分析
单身狗福利?Python爬取某婚恋网征婚数据
告别网页搜索!教你用python实现一款属于自己的翻译词典软件
Python 中random 库的详细使用
Jun 03 #Python
详解Python常用的魔法方法
Python自动化之批量处理工作簿和工作表
Jun 03 #Python
Jupyter Notebook内使用argparse报错的解决方案
You might like
详解PHP中的Traits
2015/07/29 PHP
PHP编程中的__clone()方法使用详解
2015/11/27 PHP
PHP读取大文件的多种方法介绍
2016/04/04 PHP
php单元测试phpunit入门实例教程
2017/11/17 PHP
PHP创建对象的六种方式实例总结
2019/06/27 PHP
javascript+mapbar实现地图定位
2010/04/09 Javascript
Jquery封装tab自动切换效果的具体实现
2013/07/13 Javascript
jQuery javaScript捕获回车事件(示例代码)
2013/11/07 Javascript
js获取select选中的option的text示例代码
2013/12/19 Javascript
浅析JQuery中的html(),text(),val()区别
2014/09/01 Javascript
jQuery在页面加载时动态修改图片尺寸的方法
2015/03/20 Javascript
jQuery右下角旋转环状菜单特效代码
2015/08/10 Javascript
vue.js整合vux中的上拉加载下拉刷新实例教程
2018/01/09 Javascript
JavaScript实现的反序列化json字符串操作示例
2018/07/18 Javascript
React优化子组件render的使用
2019/05/12 Javascript
vue-cli 关闭热更新操作
2020/09/18 Javascript
[05:43]VG.R战队教练Mikasa专访:为目标从未停止战斗
2016/08/02 DOTA
[44:40]Serenity vs Pain 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python中的__SLOTS__属性使用示例
2015/02/18 Python
Python3中常用的处理时间和实现定时任务的方法的介绍
2015/04/07 Python
详解Python迭代和迭代器
2016/03/28 Python
浅谈Python 字符串格式化输出(format/printf)
2016/07/21 Python
Python中使用haystack实现django全文检索搜索引擎功能
2017/08/26 Python
基于Python List的赋值方法
2018/06/23 Python
python 简单照相机调用系统摄像头实现方法 pygame
2018/08/03 Python
PyCharm鼠标右键不显示Run unittest的解决方法
2018/11/30 Python
python多任务之协程的使用详解
2019/08/26 Python
Python lambda表达式filter、map、reduce函数用法解析
2019/09/11 Python
Canvas与图片压缩的示例代码
2017/11/28 HTML / CSS
八皇后问题,输出了所有情况,不过有些结果只是旋转了90度
2016/08/15 面试题
学校消防演习方案
2014/02/19 职场文书
关于中国梦的演讲稿
2014/04/23 职场文书
小学生保护环境倡议书
2014/05/15 职场文书
学生偷窃检讨书
2014/09/25 职场文书
战马观后感
2015/06/08 职场文书
Oracle11g r2 卸载干净重装的详细教程(亲测有效已重装过)
2021/06/04 Oracle