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的web框架中的Model的教程
Apr 29 Python
你眼中的Python大牛 应该都有这份书单
Oct 31 Python
Python排序搜索基本算法之归并排序实例分析
Dec 08 Python
简单了解Django模板的使用
Dec 20 Python
python实现栅栏加解密 支持密钥加密
Mar 20 Python
Django处理Ajax发送的Get请求代码详解
Jul 29 Python
Pycharm 2019 破解激活方法图文详解
Oct 11 Python
python让函数不返回结果的方法
Jun 22 Python
Python3爬虫中识别图形验证码的实例讲解
Jul 30 Python
python中_del_还原数据的方法
Dec 09 Python
python基础入门之普通操作与函数(三)
Jun 13 Python
Pytorch中使用ImageFolder读取数据集时忽略特定文件
Mar 23 Python
高考要来啦!用Python爬取历年高考数据并分析
单身狗福利?Python爬取某婚恋网征婚数据
告别网页搜索!教你用python实现一款属于自己的翻译词典软件
Python 中random 库的详细使用
Jun 03 #Python
详解Python常用的魔法方法
Python自动化之批量处理工作簿和工作表
Jun 03 #Python
Jupyter Notebook内使用argparse报错的解决方案
You might like
Erlang的运算符(比较运算符,数值运算符,移位运算符,逻辑运算符)
2012/07/23 PHP
解析php中用PHPMailer来发送邮件的示例(126.com的例子)
2013/06/24 PHP
PHP将Excel导入数据库及数据库数据导出至Excel的方法
2015/06/24 PHP
PHP中静态变量的使用方法实例分析
2016/12/01 PHP
ThinkPHP实现生成和校验验证码功能
2017/04/28 PHP
jQuery 常见开发使用技巧总结
2009/12/26 Javascript
JavaScript实现穷举排列(permutation)算法谜题解答
2014/12/29 Javascript
JS判断客服QQ号在线还是离线状态的方法
2015/01/13 Javascript
JS模拟并美化的表单控件完整实例
2015/08/19 Javascript
jQuery validate 验证radio实例
2017/03/01 Javascript
Vue filter介绍及其使用详解
2017/10/21 Javascript
es6在react中的应用代码解析
2017/11/08 Javascript
用 js 写一个 js 解释器过程详解
2019/08/02 Javascript
微信小程序 组件的外部样式externalClasses使用详解
2019/09/06 Javascript
vue中进行微博分享的实例讲解
2019/10/14 Javascript
[01:50:49]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster BO3 第三场 1月24日
2021/03/11 DOTA
python进阶教程之循环相关函数range、enumerate、zip
2014/08/30 Python
django使用图片延时加载引起后台404错误
2017/04/18 Python
numpy数组拼接简单示例
2017/12/15 Python
Python数据集切分实例
2018/12/08 Python
使用python实现滑动验证码功能
2019/08/05 Python
django在开发中取消外键约束的实现
2020/05/20 Python
keras绘制acc和loss曲线图实例
2020/06/15 Python
python 利用toapi库自动生成api
2020/10/19 Python
用python爬虫批量下载pdf的实现
2020/12/01 Python
Python tkinter实现日期选择器
2021/02/22 Python
纯CSS3代码实现文字描边
2016/04/25 HTML / CSS
亚历山大·王官网:Alexander Wang
2017/06/23 全球购物
学生个人的自我评价分享
2013/11/05 职场文书
大学生如何写自荐信
2014/01/08 职场文书
超越自我演讲稿
2014/05/21 职场文书
质量标语大全
2014/06/12 职场文书
2014年项目工作总结
2014/11/24 职场文书
Java如何实现通过键盘输入一个数组
2022/02/15 Java/Android
Python的代理类实现,控制访问和修改属性的权限你都了解吗
2022/03/21 Python
微软发布Windows 11今年最大更新22H2(附 ISO 镜像官方下载)
2022/09/23 数码科技