编码速度慢?
对于jpeg编码,我们经常是这么用的
#img_q 代表质量
img_param = [int(cv2.IMWRITE_JPEG_QUALITY), img_q]
_, img_encode = cv2.imencode('.jpg', img, img_param)
这个缺点是速度慢,用来做图传显然是不行的,经过测试720p在树莓zero上也只能跑到6fps上下。
听说LIBJPEG-TURBO在处理大文件速度较快,于是试了一下。
安装 LIBJPEG-TURBO
wget https://sourceforge.net/projects/libjpeg-turbo/files/1.5.2/libjpeg-turbo-1.5.2.tar.gz
tar -xzvf libjpeg-turbo-1.5.2.tar.gz
sudo apt install autoconf
sudo apt install nasm
sudo apt install libtool
cd libjpeg-turbo-1.5.2
autoreconf -fiv
./configure
sudo make
sudo make install
sudo make test
测试用了python 包装库 https://github.com/lilohuang/PyTurboJPEG
测试结果
经过测试OPENCV的编码速度与LIBJPEG-TURBO在对720p图片编码时计算出来对FPS几乎没有区别,速度都不怎么快。cv2.imencode 720p 稳定8fps, TurboJPEG 720p 稳定10fps 环境树莓3,可惜没遇到能够硬编码的摄像头
pip3 install -U git+git://github.com/lilohuang/PyTurboJPEG.git
import cv2
import time
from turbojpeg import TurboJPEG, TJPF_GRAY, TJSAMP_GRAY, TJFLAG_PROGRESSIVE,TJFLAG_FASTUPSAMPLE,TJFLAG_FASTDCT,TJFLAG_BOTTOMUP,TJFLAG_ACCURATEDCT,TJFLAG_STOPONWARNING
cap = cv2.VideoCapture(0)
# cap.set(3, 800)
# cap.set(4, 600)
cap.set(3, 1280)
cap.set(4, 720)
jpeg = TurboJPEG('/home/pi/libjpeg-turbo-1.5.2/.libs/libturbojpeg.so')
fps = 0.0
while(cap.isOpened()):
t1 = time.time()
ret, frame = cap.read()
encode_params = [
cv2.IMWRITE_JPEG_QUALITY,
10,
]
data=cv2.imencode("*.jpg", frame, encode_params)[1].tobytes()
# data=jpeg.encode(frame, quality=10, flags=TJFLAG_FASTDCT)
print(len(data))
fps = ( fps + (1./(time.time()-t1)) ) / 2
print("fps= %.2f" % (fps))
cap.release()
800*600 几乎就一样了,速度上没有区别。