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 合并文件的具体实例
Aug 08 Python
python opencv实现图片旋转矩形分割
Jul 26 Python
Django之模型层多表操作的实现
Jan 08 Python
解决Python中pandas读取*.csv文件出现编码问题
Jul 12 Python
django之静态文件 django 2.0 在网页中显示图片的例子
Jul 28 Python
使用python绘制温度变化雷达图
Oct 18 Python
Python实现栈的方法详解【基于数组和单链表两种方法】
Feb 22 Python
浅析Python面向对象编程
Jul 10 Python
有关pycharm登录github时有的时候会报错connection reset的问题
Sep 15 Python
selenium+超级鹰实现模拟登录12306
Jan 24 Python
Pandas 稀疏数据结构的实现
Jul 25 Python
分享3个非常实用的 Python 模块
Mar 03 Python
高考要来啦!用Python爬取历年高考数据并分析
单身狗福利?Python爬取某婚恋网征婚数据
告别网页搜索!教你用python实现一款属于自己的翻译词典软件
Python 中random 库的详细使用
Jun 03 #Python
详解Python常用的魔法方法
Python自动化之批量处理工作簿和工作表
Jun 03 #Python
Jupyter Notebook内使用argparse报错的解决方案
You might like
SONY ICF-SW55的电路分析
2021/03/02 无线电
ThinkPHP中U方法的使用浅析
2014/06/13 PHP
windows7下安装php的php-ssh2扩展教程
2014/07/04 PHP
PHP多文件上传类实例
2015/03/07 PHP
php利用ob_start()清除输出和选择性输出的方法
2018/01/18 PHP
JavaScript转换农历类实现及调用方法
2013/01/27 Javascript
js面向对象编程之如何实现方法重载
2014/07/02 Javascript
JavaScript实现动态添加,删除行的方法实例详解
2015/07/02 Javascript
JS+DIV+CSS排版布局实现美观的选项卡效果
2015/10/10 Javascript
基于Vuejs实现购物车功能
2016/08/02 Javascript
用js实现博客打赏功能
2016/10/24 Javascript
jQuery grep()方法详解及实例代码
2016/10/30 Javascript
Javascript使用uploadify来实现多文件上传
2016/11/16 Javascript
从对象列表中获取一个对象的方法,依据关键字和值
2017/09/20 Javascript
js验证密码强度解析
2020/03/18 Javascript
Vue 组件的挂载与父子组件的传值实例
2020/09/02 Javascript
python分割和拼接字符串
2013/11/01 Python
python读文件逐行处理的示例代码分享
2013/12/27 Python
python进阶教程之词典、字典、dict
2014/08/29 Python
决策树的python实现方法
2014/11/18 Python
python实现的二叉树定义与遍历算法实例
2017/06/30 Python
一些Centos Python 生产环境的部署命令(推荐)
2018/05/07 Python
tensorflow实现简单的卷积网络
2018/05/24 Python
python里dict变成list实例方法
2019/06/26 Python
Pycharm使用之设置代码字体大小和颜色主题的教程
2019/07/12 Python
Python学习笔记之字符串和字符串方法实例详解
2019/08/22 Python
使用Pandas将inf, nan转化成特定的值
2019/12/19 Python
tensorflow 只恢复部分模型参数的实例
2020/01/06 Python
鞋类设计与工艺专业销售求职信
2013/11/01 职场文书
2014年十一国庆节活动方案
2014/09/16 职场文书
房产销售独家委托书范本
2014/10/01 职场文书
董事长助理岗位职责
2015/02/11 职场文书
部门2015年度工作总结
2015/04/29 职场文书
nginx 反向代理之 proxy_pass的实现
2021/03/31 Servers
MySQL系列之十四 MySQL的高可用实现
2021/07/02 MySQL
教你在 Java 中实现 Dijkstra 最短路算法的方法
2022/04/08 Java/Android