引子
CV领域肯定是少不了绕不过去图像编解码。童鞋们,可能会说,CV领域中遇事不决,OpenCV。没错,OpenCV是可以解决图像处理中的绝大部分问题,但是由于OpenCV是是一个通用的CV&图像处理的库。它用起来确实很顺手,但是嘛。。。但是它在一些性能方面有的时候确实是差点意思。那么,之前项目中有遇到过对图像编解码性能要求的地方,经过科学上网,还是找到了一个高效的JPEG编解码的(且使用CPU的,使用GPU的童鞋可以参考这篇博客Ubuntu20.04下DeepStream Python环境安装_nvidia deepstream sdk 6.4-CSDN博客)。OK,那让我们开始吧。
一、PyTurboJPEG介绍
说到PyTurboJPEG那一定要聊到TurboJPEG,那么说到TurboJPEG(libjpeg-turbo)那一定要聊到libjpeg,大名鼎鼎的libjpeg大家一定都听说过。libjpeg是一个广泛使用的 JPEG 图像压缩库,采用 C 语言开发。那么TurboJPEG呢,就是基于libjpeg的,优化了的高性能JPEG压缩库,并且它在压缩率和速度之间做了很好的平衡,采用了SIMD指令集(MMX,SSE2,NEON,AltiVec),来加速x86,x86-64,ARM和PowerPC系统上的JPEG压缩和解压缩。libjpeg-turbo的速度通常是libjpeg的2-6倍。凭借其高度优化的霍夫曼编码,libjpeg-turbo仍然可以大大超过libjpeg。在许多情况下,libjpeg-turbo的性能可与专有的高速JPEG编解码器相媲美。那么,PyTurboJPEG就显而易见,是在libjpeg-turbo的基础上套了一层python。
二、安装PyTurboJPEG
1、sudo apt-get install nasm
2、进入下载官网页面,网址https://sourceforge.net/projects/libjpeg-turbo/files/
下载2.0.x版本的libjpeg-turbo-2.0.2.tar.gz
3、tar -zxvf libjpeg-turbo-2.0.2.tar.gz
4、cd libjpeg-turbo-2.0.2
mkdir build
cd build
cmake -G"Unix Makefiles" ..
make -j8
make install
cp -rvf /opt/libjpeg-turbo/lib64/* /lib/
5、pip install PyTurboJPEG
三、测试代码
import cv2
from turbojpeg import TurboJPEG, TJPF_GRAY, TJSAMP_GRAY, TJFLAG_PROGRESSIVE, TJFLAG_FASTUPSAMPLE, TJFLAG_FASTDCT
jpeg = TurboJPEG()
# decoding input.jpg to BGR array
with open('input.jpg', 'rb') as in_file:
bgr_array = jpeg.decode(in_file.read())
cv2.imshow('bgr_array', bgr_array)
cv2.waitKey(0)