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 23 Python
Selenium的使用详解
Oct 19 Python
python 实现读取一个excel多个sheet表并合并的方法
Feb 12 Python
django将数组传递给前台模板的方法
Aug 06 Python
python禁用键鼠与提权代码实例
Aug 16 Python
python数据处理之如何选取csv文件中某几行的数据
Sep 02 Python
opencv调整图像亮度对比度的示例代码
Sep 27 Python
python使用html2text库实现从HTML转markdown的方法详解
Feb 21 Python
Python如何实现FTP功能
May 28 Python
为什么相对PHP黑python的更少
Jun 21 Python
详解Scrapy Redis入门实战
Nov 18 Python
Python Pandas解析读写 CSV 文件
Apr 11 Python
高考要来啦!用Python爬取历年高考数据并分析
单身狗福利?Python爬取某婚恋网征婚数据
告别网页搜索!教你用python实现一款属于自己的翻译词典软件
Python 中random 库的详细使用
Jun 03 #Python
详解Python常用的魔法方法
Python自动化之批量处理工作簿和工作表
Jun 03 #Python
Jupyter Notebook内使用argparse报错的解决方案
You might like
php采用session实现防止页面重复刷新
2015/12/24 PHP
用显卡加速,轻松把笔记本打造成取暖器的办法!
2013/04/17 Javascript
通过隐藏iframe实现文件下载的js方法介绍
2014/02/26 Javascript
iframe里使用JavaScript控制主页转向的方法
2015/04/03 Javascript
如何用js 实现依赖注入的思想,后端框架思想搬到前端来
2015/08/03 Javascript
jQuery事件绑定和解绑、事件冒泡与阻止事件冒泡及弹出应用示例
2019/05/13 jQuery
javascript系统时间设置操作示例
2019/06/17 Javascript
JavaScript实现五子棋游戏的方法详解
2019/07/08 Javascript
js实现随机点名程序
2020/09/17 Javascript
[02:56]DOTA2英雄基础教程 巨魔战将
2013/12/10 DOTA
Python切片知识解析
2016/03/06 Python
python使用Matplotlib绘制分段函数
2018/09/25 Python
python中将zip压缩包转为gz.tar的方法
2018/10/18 Python
Python实现的IP端口扫描工具类示例
2019/02/15 Python
如何使用python进行pdf文件分割
2019/11/11 Python
django admin 添加自定义链接方式
2020/03/11 Python
记录模型训练时loss值的变化情况
2020/06/16 Python
解决Pycharm双击图标启动不了的问题(JetBrains全家桶通用)
2020/08/07 Python
老海军美国官网:Old Navy
2016/09/05 全球购物
Mankind西班牙男士护肤品网站:购买皮肤护理、护发和剃须
2017/04/27 全球购物
巴西手表购物网站:eclock
2019/03/19 全球购物
豪华复古化妆:Besame Cosmetics
2019/09/06 全球购物
Noon埃及:埃及在线购物
2019/11/26 全球购物
VisionPros美国站:加拿大在线隐形眼镜和眼镜零售商
2020/02/11 全球购物
《赵州桥》教学反思
2014/02/17 职场文书
食品安全标语
2014/06/07 职场文书
班级文化建设标语
2014/06/23 职场文书
新店开张活动方案
2014/08/24 职场文书
优秀教师推荐材料
2014/12/16 职场文书
男生贾里读书笔记
2015/06/30 职场文书
2015年四年级班主任工作总结
2015/10/22 职场文书
uwsgi+nginx代理Django无法访问静态资源的解决
2021/05/10 Servers
PyTorch 实现L2正则化以及Dropout的操作
2021/05/27 Python
面试被问select......for update会锁表还是锁行
2021/11/11 MySQL
引用计数法和root搜索算法以及JVM中判定对象需要回收的方法
2022/04/19 Java/Android
VMware虚拟机安装 Windows Server 2022的详细图文教程
2022/09/23 Servers