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 startswith()函数与endswith函数
Sep 08 Python
python并发编程之线程实例解析
Dec 27 Python
python实现堆和索引堆的代码示例
Mar 19 Python
对python sklearn one-hot编码详解
Jul 10 Python
python的依赖管理的实现
May 14 Python
使用python搭建服务器并实现Android端与之通信的方法
Jun 28 Python
python matplotlib折线图样式实现过程
Nov 04 Python
使用Tensorflow实现可视化中间层和卷积层
Jan 24 Python
python求一个字符串的所有排列的实现方法
Feb 04 Python
Python线程threading模块用法详解
Feb 26 Python
Python matplotlib 绘制双Y轴曲线图的示例代码
Jun 12 Python
Python模拟键盘输入自动登录TGP
Nov 27 Python
高考要来啦!用Python爬取历年高考数据并分析
单身狗福利?Python爬取某婚恋网征婚数据
告别网页搜索!教你用python实现一款属于自己的翻译词典软件
Python 中random 库的详细使用
Jun 03 #Python
详解Python常用的魔法方法
Python自动化之批量处理工作簿和工作表
Jun 03 #Python
Jupyter Notebook内使用argparse报错的解决方案
You might like
批量修改RAR文件注释的php代码
2010/11/20 PHP
PHP中对于浮点型的数据需要用不同的方法解决
2014/03/11 PHP
PHP实现的ID混淆算法类与用法示例
2018/08/10 PHP
JavaScript 高级语法介绍
2009/06/15 Javascript
编写自己的jQuery提示框(Tip)插件
2015/02/05 Javascript
JQuery中$.each 和$(selector).each()的区别详解
2015/03/13 Javascript
跟我学习javascript的undefined与null
2015/11/17 Javascript
深入解析JavaScript中函数的Currying柯里化
2016/03/19 Javascript
50 个 jQuery 插件可将你的网站带到另外一个高度
2016/04/26 Javascript
js正则表达式验证密码强度【推荐】
2017/03/03 Javascript
js随机生成一个验证码
2017/06/01 Javascript
JS+canvas动态绘制饼图的方法示例
2017/09/12 Javascript
vue-swiper的使用教程
2018/08/30 Javascript
封装Vue Element的table表格组件的示例详解
2020/08/19 Javascript
[01:25]DOTA2自定义游戏灵园鬼域等你踏足
2015/10/30 DOTA
[53:43]VP vs NewBee Supermajor 胜者组 BO3 第三场 6.5
2018/06/06 DOTA
利用Django框架中select_related和prefetch_related函数对数据库查询优化
2015/04/01 Python
用Python编写一个简单的Lisp解释器的教程
2015/04/03 Python
python实现用户登录系统
2016/05/21 Python
Python判断列表是否已排序的各种方法及其性能分析
2016/06/20 Python
python 创建弹出式菜单的实现代码
2017/07/11 Python
Python numpy 提取矩阵的某一行或某一列的实例
2018/04/03 Python
pycharm: 恢复(reset) 误删文件的方法
2018/10/22 Python
Python实现字符串匹配的KMP算法
2019/04/04 Python
Python OpenCV之图片缩放的实现(cv2.resize)
2019/06/28 Python
Python使用scrapy爬取阳光热线问政平台过程解析
2019/08/14 Python
python 爬虫请求模块requests详解
2020/12/04 Python
美国CVS药店官网:CVS Pharmacy
2018/07/26 全球购物
加利福尼亚州威尼斯的女性奢侈品设计师服装和概念店:Mona Moore
2018/09/13 全球购物
PHP如何防止SQL注入
2014/05/03 面试题
小学教师管理制度
2014/01/18 职场文书
幼儿园户外活动总结
2014/07/04 职场文书
国际会计专业求职信
2014/08/04 职场文书
县委常委班子对照检查材料思想汇报
2014/09/28 职场文书
党员违纪检讨书
2015/05/05 职场文书
七年级作文之环保作文
2019/10/17 职场文书