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 中的列表解析和生成表达式
Mar 10 Python
Python最基本的数据类型以及对元组的介绍
Apr 14 Python
深入理解python函数递归和生成器
Jun 06 Python
python利用有道翻译实现"语言翻译器"的功能实例
Nov 14 Python
TensorFlow实现创建分类器
Feb 06 Python
对Python字符串中的换行符和制表符介绍
May 03 Python
Python中的groupby分组功能的实例代码
Jul 11 Python
Django密码存储策略分析
Jan 09 Python
详解Python中namedtuple的使用
Apr 27 Python
python的reverse函数翻转结果为None的问题
May 11 Python
使用opencv中匹配点对的坐标提取方式
Jun 04 Python
python 如何把docker-compose.yaml导入到数据库相关条目里
Jan 15 Python
高考要来啦!用Python爬取历年高考数据并分析
单身狗福利?Python爬取某婚恋网征婚数据
告别网页搜索!教你用python实现一款属于自己的翻译词典软件
Python 中random 库的详细使用
Jun 03 #Python
详解Python常用的魔法方法
Python自动化之批量处理工作簿和工作表
Jun 03 #Python
Jupyter Notebook内使用argparse报错的解决方案
You might like
BBS(php & mysql)完整版(四)
2006/10/09 PHP
解析argc argv在php中的应用
2013/06/24 PHP
使用pthreads实现真正的PHP多线程(需PHP5.3以上版本)
2014/05/05 PHP
thinkPHP多语言切换设置方法详解
2016/11/11 PHP
PHP实现对xml的增删改查操作案例分析
2017/05/19 PHP
Laravel 5.5 异常处理 & 错误日志的解决
2019/10/17 PHP
js的event详解。
2006/09/06 Javascript
玩转jQuery按钮 请告诉我你最喜欢哪些?
2012/01/08 Javascript
面向对象的Javascript之三(封装和信息隐藏)
2012/01/27 Javascript
基于jquery实现的定时显示与隐藏div广告的实现代码
2013/08/22 Javascript
jQuery 回车事件enter使用示例
2014/02/18 Javascript
Knockout自定义绑定创建方法
2015/12/26 Javascript
javascript中的深复制详解及实例分析
2016/12/29 Javascript
jQuery中ajax获取数据赋值给页面的实例
2017/12/31 jQuery
vue项目中jsonp跨域获取qq音乐首页推荐问题
2018/05/30 Javascript
Vue分页器实现原理详解
2019/06/28 Javascript
Javascript中Math.max和Math.max.apply的区别和用法详解
2020/08/24 Javascript
python实现定时同步本机与北京时间的方法
2015/03/24 Python
Python使用matplotlib绘制动画的方法
2015/05/20 Python
Python中集合的内建函数和内建方法学习教程
2015/08/19 Python
python django 访问静态文件出现404或500错误
2017/01/20 Python
python 实现数组list 添加、修改、删除的方法
2018/04/04 Python
在Pycharm中修改文件默认打开方式的方法
2019/01/17 Python
python画双y轴图像的示例代码
2019/07/07 Python
Python generator生成器和yield表达式详解
2019/08/08 Python
django2.2安装错误最全的解决方案(小结)
2019/09/24 Python
css3 利用transform打造走动的2D时钟
2020/10/20 HTML / CSS
HTML5边玩边学(3)像素和颜色
2010/09/21 HTML / CSS
《晏子使楚》教学反思
2014/02/08 职场文书
创建省级文明单位实施方案
2014/02/27 职场文书
《三顾茅庐》教学反思
2014/04/10 职场文书
2014年医院科室工作总结
2014/12/20 职场文书
教师个人自我评价
2015/03/04 职场文书
致地震灾区的慰问信
2015/03/23 职场文书
幼儿园毕业典礼家长致辞
2015/07/29 职场文书
vue3.0 数字翻牌组件的使用方法详解
2022/04/20 Vue.js