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 相关文章推荐
easy_install python包安装管理工具介绍
Feb 10 Python
python调用windows api锁定计算机示例
Apr 17 Python
Python的Twisted框架上手前所必须了解的异步编程思想
May 25 Python
Tornado高并发处理方法实例代码
Jan 15 Python
django manage.py扩展自定义命令方法
May 27 Python
分析经典Python开发工程师面试题
Apr 08 Python
python并发编程 Process对象的其他属性方法join方法详解
Aug 20 Python
django 链接多个数据库 并使用原生sql实现
Mar 28 Python
在django中实现choices字段获取对应字段值
Jul 12 Python
解决运行django程序出错问题 'str'object has no attribute'_meta'
Jul 15 Python
聊聊Python中关于a=[[]]*3的反思
Jun 02 Python
Python常遇到的错误和异常
Nov 02 Python
高考要来啦!用Python爬取历年高考数据并分析
单身狗福利?Python爬取某婚恋网征婚数据
告别网页搜索!教你用python实现一款属于自己的翻译词典软件
Python 中random 库的详细使用
Jun 03 #Python
详解Python常用的魔法方法
Python自动化之批量处理工作簿和工作表
Jun 03 #Python
Jupyter Notebook内使用argparse报错的解决方案
You might like
php 高效率写法 推荐
2010/02/21 PHP
解析PHP正则提取或替换img标记属性
2013/06/26 PHP
解析php 版获取重定向后的地址(代码)
2013/06/26 PHP
php 5.6版本中编写一个PHP扩展的简单示例
2015/01/20 PHP
php面向对象中static静态属性和静态方法的调用
2015/02/08 PHP
PHP使用mysql_fetch_row查询获得数据行列表的方法
2015/03/18 PHP
Zend Framework教程之Zend_Config_Ini用法分析
2016/03/23 PHP
php实现按天数、星期、月份查询的搜索框
2016/05/02 PHP
thinkPHP中钩子的两种配置调用方法详解
2016/11/11 PHP
nodejs实用示例 缩址还原
2010/12/28 NodeJs
javascript中的正则表达式使用指南
2015/03/01 Javascript
Bootstrap每天必学之缩略图与警示窗
2015/11/29 Javascript
再谈javascript注入 黑客必备!
2016/09/14 Javascript
js制作支付倒计时页面
2016/10/21 Javascript
如何快速上手Vuex
2017/02/14 Javascript
详解微信开发中snsapi_base和snsapi_userinfo及静默授权的实现
2017/03/11 Javascript
JavaScript获取URL参数的方法之一
2017/03/24 Javascript
Vue.js中组件中的slot实例详解
2017/07/17 Javascript
NodeJS使用七牛云存储上传文件的方法
2017/07/24 NodeJs
vue.js整合vux中的上拉加载下拉刷新实例教程
2018/01/09 Javascript
详解用场景去理解函数柯里化(入门篇)
2019/04/11 Javascript
node事件循环和process模块实例分析
2020/02/14 Javascript
详解React中共享组件逻辑的三种方式
2021/02/02 Javascript
python回溯法实现数组全排列输出实例分析
2015/03/17 Python
Python中操作mysql的pymysql模块详解
2016/09/13 Python
python实现自动获取IP并发送到邮箱
2018/12/26 Python
python集合常见运算案例解析
2019/10/17 Python
jupyter lab文件导出/下载方式
2020/04/22 Python
浅谈python处理json和redis hash的坑
2020/07/16 Python
企业优秀员工事迹材料
2014/05/28 职场文书
党员教师一句话承诺
2014/05/30 职场文书
语文教研活动总结
2014/07/02 职场文书
2014年档案管理工作总结
2014/11/17 职场文书
廉洁自律承诺书范文
2015/04/28 职场文书
2016年端午节校园广播稿
2015/12/18 职场文书
my.ini优化mysql数据库性能的十个参数(推荐)
2021/05/26 MySQL