当前位置: 首页 > news >正文

Ubuntu下使用PyTurboJPEG加速图像编解码

目录

一、概述

二、安装PyTurboJPEG

三、测试


一、概述

在计算机视觉领域,图像编解码是绕不开的基础环节。虽然 OpenCV 能解决大部分图像处理问题,但在性能要求严苛的场景下存在短板。本文将介绍基于 libjpeg-turbo 的高效 JPEG 编解码库 PyTurboJPEG,特别适用于纯 CPU 环境下的性能优化需求。

PyTurboJPEG 核心优势如下:

  1. 技术渊源:ibjpeg 是经典的 JPEG 压缩库,使用C语言开发,而 libjpeg-turbo 是在此基础上进行深度优化的库,使用来SIMD 指令集(MMX、SSE2、NEON 等)实现性能加速,支持 x86、ARM 等主流架构。本文介绍的PyTurboJPEG则是 libjpeg-turbo 的 Python 封装版。

  2. 性能表现:实测表明,libjpeg-turbo在JPEG 编解码速度上较原生libjpeg提升2-6 倍,且在压缩率与速度之间达到极佳平衡,性能可媲美部分商业编解码器。

二、安装PyTurboJPEG

本文实验环境为Ubuntu22.04。

首先安装nasm:

sudo apt-get install nasm

然后进入下载官网页面,网址https://sourceforge.net/projects/libjpeg-turbo/files/ 。

下载2.0.x版本对应的libjpeg-turbo-2.0.2.tar.gz,如下图所示:

下载后使用下面的命令进行解压

tar -zxvf libjpeg-turbo-2.0.2.tar.gz

然后使用下面的命令进行编译和安装:

cd libjpeg-turbo-2.0.2
mkdir build 
cd build
cmake -G"Unix Makefiles" ..
make -j8
sudo make install
sudo cp -rvf /opt/libjpeg-turbo/lib64/* /lib/

最后安装PyTurboJPEG库即可:

pip install PyTurboJPEG

三、测试

下面测试图像读取的性能。

以下是使用Opencv的imdecode函数实现:

import os
import time
import cv2
import numpy as npfrom turbojpeg import TurboJPEGimg_folder = '../test/img5/'
dst_folder = '../test/result/'# 检索img_folder下的所有图片
img_files = os.listdir(img_folder)
jpegtool = TurboJPEG()start_time = time.time()# 逐张处理
pic = 0
for img_file in img_files:# 使用opencv的decode读取图像img = cv2.imdecode(np.fromfile(img_folder + img_file, dtype=np.uint8), cv2.IMREAD_COLOR)pic += 1end_time = time.time()
print('average time: ', (end_time - start_time) / pic)

测试结果为2.5ms/张图像。

下面是使用PyTurboJPEG的版本:

import os
import timefrom turbojpeg import TurboJPEGimg_folder = '../test/img5/'
dst_folder = '../test/result/'# 检索img_folder下的所有图片
img_files = os.listdir(img_folder)
jpegtool = TurboJPEG()start_time = time.time()# 逐张处理
pic = 0
for img_file in img_files:# decoding input.jpg to BGR arraywith open(img_folder + img_file, 'rb') as in_file:bgr_array = jpegtool.decode(in_file.read())pic += 1end_time = time.time()
print('average time: ', (end_time - start_time) / pic)

测试结果为2.0ms/张。


文章转载自:

http://mibvOGs0.cypLn.cn
http://AuqOcYJR.cypLn.cn
http://HOBKsIYC.cypLn.cn
http://IYll0gvO.cypLn.cn
http://ocBC5oI1.cypLn.cn
http://nDp7f0kl.cypLn.cn
http://eoG6KlZe.cypLn.cn
http://RIUpOfjy.cypLn.cn
http://TEAAS5CC.cypLn.cn
http://NuRpGn38.cypLn.cn
http://pS3PRitV.cypLn.cn
http://JX5ISZzp.cypLn.cn
http://jAGSdB4o.cypLn.cn
http://EjloVdYP.cypLn.cn
http://Qpdyr3BH.cypLn.cn
http://1o5RrVAG.cypLn.cn
http://axh6XWkK.cypLn.cn
http://KsY8xMF5.cypLn.cn
http://Oy6CdH7f.cypLn.cn
http://bZFPQCeN.cypLn.cn
http://VY0hEW8C.cypLn.cn
http://mkYop3gL.cypLn.cn
http://m62uENhF.cypLn.cn
http://ziYjVdHb.cypLn.cn
http://ikahACoY.cypLn.cn
http://9gARiv8J.cypLn.cn
http://0qyhAMyx.cypLn.cn
http://mTVeG4Ox.cypLn.cn
http://O3vrUf3w.cypLn.cn
http://XJwr0jM6.cypLn.cn
http://www.dtcms.com/a/245547.html

相关文章:

  • 新能源知识库(46)EMS与协控装置
  • Peiiieee的Linux笔记(1)
  • [OS_20] 设备和驱动程序 | GPIO | IPP | PCIe总线 | ioctl
  • Android S - 恢复部分应用安装
  • 使用Gitlab CI/CD结合docker容器实现自动化部署
  • javascript入门
  • RT-Thread Studio 配置使用详细教程
  • Spring Cloud Gateway 介绍
  • 金蝶K3 ERP 跨网段访问服务器卡顿问题排查和解决方法
  • 用户态与内核态是什么?有什么作用?两者在什么时候切换?为什么要切换?
  • word用endnote插入国标参考文献
  • 【C++】多重继承与虚继承
  • IDEA2025(2025.1.1)都更新了什么???
  • DevSecOps实践:用Terraform策略检查筑牢基础设施安全防线
  • 蓝桥杯20112 不同的总分值
  • 金属切削机床制造企业如何破局?探索项目管理数字化转型
  • Redis:渐进式遍历
  • vue3 数据过滤方法
  • Linux笔记之Ubuntu22.04安装 fcitx5 输入法
  • 观点 | 科技企业到了品牌建设的历史性窗口期
  • PRIMES“中国校准实验室”正式运营,携手东隆科技共筑精准测量新标准
  • ROS2 工作空间中, CMakeLists.txt, setup.py和 package.xml的作用分别是?
  • [免费]微信小程序音乐播放器(爬取网易云音乐数据)(node.js后端)【论文+源码】
  • 智能眼镜销量暴涨 800%,科技革新引发消费热潮
  • docker compose安装Prometheus、Grafana
  • VAS1082Q奇力科技LED驱动芯片固定电流值用于车用市场
  • 卡通幼儿园教育通用可爱PPT模版分享
  • Redisson + Lettuce 在 Spring Boot 中的最佳实践方案
  • 三大能力升级,为老项目重构开辟新路径
  • WPF调用Python心率监测脚本解决方案