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将xml xsl文件生成html文件存储示例讲解
Dec 03 Python
Python实现发送email的几种常用方法
Aug 18 Python
跟老齐学Python之做一个小游戏
Sep 28 Python
pygame学习笔记(4):声音控制
Apr 15 Python
Python的Flask框架中集成CKeditor富文本编辑器的教程
Jun 13 Python
详解Python进阶之切片的误区与高级用法
Dec 24 Python
python 同时运行多个程序的实例
Jan 07 Python
djang常用查询SQL语句的使用代码
Feb 15 Python
OpenCV 边缘检测
Jul 10 Python
Python使用grequests(gevent+requests)并发发送请求过程解析
Sep 25 Python
解决python虚拟环境切换无效的问题
Apr 30 Python
python要安装在哪个盘
Jun 15 Python
高考要来啦!用Python爬取历年高考数据并分析
单身狗福利?Python爬取某婚恋网征婚数据
告别网页搜索!教你用python实现一款属于自己的翻译词典软件
Python 中random 库的详细使用
Jun 03 #Python
详解Python常用的魔法方法
Python自动化之批量处理工作簿和工作表
Jun 03 #Python
Jupyter Notebook内使用argparse报错的解决方案
You might like
PHP6 先修班 JSON实例代码
2008/08/23 PHP
php 遍历数据表数据并列表横向排列的代码
2009/09/05 PHP
PHP substr 截取字符串出现乱码问题解决方法[utf8与gb2312]
2011/12/16 PHP
php加密解密实用类分享
2014/01/07 PHP
php多任务程序实例解析
2014/07/19 PHP
PHP页面转UTF-8中文编码乱码的解决办法
2015/10/20 PHP
CodeIgniter配置之database.php用法实例分析
2016/01/20 PHP
javascript Zifa FormValid 0.1表单验证 代码打包下载
2007/06/08 Javascript
javascript iframe编程相关代码
2009/12/28 Javascript
input 输入框获得/失去焦点时隐藏/显示文字(jquery版)
2013/04/02 Javascript
jQuery实现鼠标划过添加和删除class的方法
2015/06/26 Javascript
nodejs利用http模块实现银行卡所属银行查询和骚扰电话验证示例
2016/12/30 NodeJs
微信小程序之picker日期和时间选择器
2017/02/09 Javascript
完美解决浏览器跨域的几种方法(汇总)
2017/05/08 Javascript
nodeJS微信分享
2017/12/20 NodeJs
webpack 4.0.0-beta.0版本新特性介绍
2018/02/10 Javascript
webpack中的热刷新与热加载的区别
2018/04/09 Javascript
构建Vue大型应用的10个最佳实践(小结)
2019/11/07 Javascript
python正则表达式抓取成语网站
2013/11/20 Python
Python实现的数据结构与算法之快速排序详解
2015/04/22 Python
python opencv之SIFT算法示例
2018/02/24 Python
python3+PyQt5实现文档打印功能
2018/04/24 Python
python事件驱动event实现详解
2018/11/21 Python
matlab中imadjust函数的作用及应用举例
2020/02/27 Python
Python中操作各种多媒体,视频、音频到图片的代码详解
2020/06/04 Python
iframe跨域的几种常用方法
2019/11/11 HTML / CSS
说出ArrayList,Vector, LinkedList的存储性能和特性
2015/01/04 面试题
护士自荐信怎么写
2013/10/18 职场文书
思想汇报范文
2013/11/04 职场文书
《世界多美呀》教学反思
2014/03/02 职场文书
家长对孩子的评语
2014/04/18 职场文书
面试自我介绍演讲稿
2014/04/29 职场文书
宣传标语大全
2014/07/01 职场文书
2014年平安创建工作总结
2014/11/24 职场文书
试用期自我评价怎么写
2015/03/10 职场文书
PHP面试题 wakeup魔法 Ezpop pop序列化与反序列化
2022/04/11 PHP