OpenCV 进行图片压缩

发布时间: 2022-02-26 09:47:26 作者: 大象笔记

图片压缩的必要性

opencv 处理后的图片非常大,例如一个 200K 的 jpg,处理后保存为 PNG,文件体积变为 1.8M。 如果是本地处理倒是没有什么问题,但是如果是在服务端进行处理,那么每次下载都会造成极大的带宽浪费。 同时也造成了磁盘空间的压力。

所以,还是有必要进行图片压缩操作的。

OpenCV 压缩函数

PNG 压缩

cv2.imwrite('compress_img1.png', img,  [cv2.IMWRITE_PNG_COMPRESSION, 9])

https://docs.opencv.org/4.x/d8/d6a/group__imgcodecs__flags.html#ga292d81be8d76901bff7988d18d2b42ac

jpeg 对应的参数

For JPEG, it can be a quality from 0 to 100 (the higher is the better). Default value is 95.

cv2.imwrite(res_path, img, [int(cv2.IMWRITE_JPEG_QUALITY), 98]) 

JPEG 还是 JPEG 2000

JPEG2000是JPEG的升级版,其压缩率比JPEG高约30%左右,同时支持有损和无损压缩。 JPEG2000格式一个极其重要的特征在于它能实现渐进传输,即先传输图像的轮廓,然后逐步传输数据,不断提高图像质量,让图像由朦胧到清晰显示。

唯一不确定的是,不知道微信小程序是否支持 JPEG2000。 官方文档只是笼统的说支持 JPG,但是是否支持 2000,没细说。 还是真实环境测试一下。

JPEG 2000文件的副档名通常为.jp2,MIME类型是image/jp2。

保险起见还是用 jpg 格式。

效果

质量参数改成 98 之后,图片大小由 PNG 的 1.8M 压缩为 400K。

虽然视觉上有明细的差异,但是可以接受。

效果体验

做了一个在线版的 opencv 图像处理微信小程序,欢迎体验

我是一名山东烟台的开发者,联系作者