opencv+libjpeg-turbo交叉编译

OpenCV静态库交叉编译实战:集成FFmpeg与libjpeg的嵌入式视觉处理方案 本文详细介绍了OpenCV静态库交叉编译的实战经验,重点讲解了如何集成FFmpeg与libjpeg以优化嵌入式视觉处理方案。通过具体案例和步骤解析,帮助开发者在资源受限的嵌入式设备上实现高性能图像处理,提升帧率并降低内存占用。 阅读详情

opencv库中自带了 对JPEG的编解码,其内部实质上是基于第三方库libjpeg进行解码的。但是libjpeg本身的性能并不是很快,特别是在ARM平台下。

libjpeg-turbo简介

libjpeg-turbo是一个使用SIMD技术(MMX、SSE2、AVX2、NEON)进行加速的JPEG编码解码器,能够在基于x86、x86_64、arm的系统上使用。相对于标准版libjpeg能够提供2-6x的性能提升。
地址:https://github.com/libjpeg-turbo/libjpeg-turbo
在ARM平台可以提前编译好libjpeg-turbo。
编译时可以显式指定安装的路径

cmake -D CMAKE_INSTALL_PREFIX=./install ..

注意: 建议使用libjpeg-turbo-2.0.1这个版本,2.0.2我编译完成链接opencv时有问题。

交叉编译opencv

参考:https://docs.opencv.org/master/d0/d76/tutorial_arm_crosscompile_with_cmake.html
注意:硬件加速选项-DENABLE_VFPV3=ON开启时我cmake不通过,所以遇到同样问题的记得不加这个选项。

cd opencv-3.4.0
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
            -DCMAKE_TOOLCHAIN_FILE=../platforms/linux/aarch64-gnu.toolchain.cmake \
           -D CMAKE_INSTALL_PREFIX=./install \
           -D INSTALL_C_EXAMPLES=OFF \
           -D INSTALL_PYTHON_EXAMPLES=OFF \
            -DENABLE_NEON=ON  \
           -D WITH_TBB=ON \
           -DBUILD_TBB=ON  \
           -D WITH_V4L=ON \
           -D WITH_QT=OFF \
            -D WITH_CUDA=OFF \
           -D WITH_OPENGL=ON \
           -D BUILD_opencv_python2=OFF \
            -D BUILD_opencv_python3=OFF \
           -D BUILD_EXAMPLES=OFF ..

用以上的cmake选项就能交叉编译opencv了,但是上面的cmake还是用的libjpeg编译链接的opencv。我们需要在编译中要用libjpeg-turbo替换libjpeg,所以还需要添加额外的选项。
主要选项为

cmake -DWITH_JPEG=ON -DBUILD_JPEG=OFF -DJPEG_INCLUDE_DIR=/path/to/libjepeg-turbo/include/ -DJPEG_LIBRARY=/path/to/libjpeg-turbo/lib/libjpeg.a 

这里贴上添加后的完成cmake

cmake -D CMAKE_BUILD_TYPE=RELEASE \
           -DCMAKE_TOOLCHAIN_FILE=../platforms/linux/aarch64-gnu.toolchain.cmake \
           -D CMAKE_INSTALL_PREFIX=./install \
           -D INSTALL_C_EXAMPLES=OFF \
           -D INSTALL_PYTHON_EXAMPLES=OFF \
           -DENABLE_NEON=ON  \
           -D WITH_TBB=ON \
           -DBUILD_TBB=ON  \
           -D WITH_V4L=ON \
           -D WITH_QT=OFF \
            -D WITH_CUDA=OFF \
           -D WITH_OPENGL=ON \
           -D BUILD_opencv_python2=OFF \
            -D BUILD_opencv_python3=OFF \
           -D BUILD_EXAMPLES=OFF \
           -DWITH_JPEG=ON  \
          -DBUILD_JPEG=OFF   \
           -DJPEG_INCLUDE_DIR=.../turbo-2.0.1/include  \
          -DJPEG_LIBRARY=.../turbo-2.0.1/lib/libjpeg.a  ..

遇到的坑

按理用上面的方法就能work了,但是编译中遇到错误记录如下

turbo-2.0.1/lib/libjpeg.a(jdmarker.c.o): relocation R_AARCH64_ADR_PREL_PG_HI21 against external symbol `__stack_chk_guard@@GLIBC_2.17' can not be used when making a shared object; recompile with -fPIC

解决方法:在编译libjpeg-turbo库时添加-fPIC选项,具体为在CMakeLists.txt中添加add_compile_options(-fPIC)选项。这样就能编译通过了。

编译成功后在ARM平台下我测试的imencode的耗时由79ms降到了17ms。

Reference:
https://blog.youkuaiyun.com/zymill/article/details/81664233
https://stackoverflow.com/questions/10465209/how-to-compile-opencv-with-libjpeg-turbo

海思hi3516移植libjpeg-turbo2.0.5 libjpeg-turbo2.0.5在海思hi3516cv500上的使用体验 libjpeg-turbo编译方式 交叉编译参考 https://blog.youkuaiyun.com/fengbingchun/article/details/96633906 linux下编译参考 https://blog.youkuaiyun.com/weixin_42118374/article/details/100579004 编译完成后找到libturbojpeg.a和turbojpeg.h文件,这就是我们jpeg解码的两个文件。 找到例 阅读详情

相关推荐

解码多媒体开发中的‘依赖地狱‘:OpenCV交叉编译常见陷阱与工程化解决方案

本文深入探讨了OpenCV交叉编译中的常见依赖问题,如FFmpeg循环依赖和libjpeg-turbo优化陷阱,并提供了一套工程化解决方案。通过静态库与动态库的混合链接策略、自动化构建脚本和环境隔离技术,帮助开发者高效解决'依赖地狱'问题,提升嵌入式设备上的计算机视觉应用部署效率。

weixin_29290379的博客 538

opencv交叉编译静态库,支持ffmpeg、libjpeg,实现取流及写入jpeg文件

问题:如果使用动态库,后面编译opencv的时候ffmpeg选项始终为no,首先是cmake测试ffmpeg是否可以成功编译时,返回不成功,打印如下:WARNING: Can’t build ffmpeg test code。然后使用cmake给的编译参数,我们自己去测试是否可以编译成功,结果也是不成功,原因是:ffmpeg的多个动态库有互相依赖,所以编译时找不到一些符号。(2)、编译目录:/home/cxyazhou/work/opencv-4.7.0_build。4、进入build目录,进行编译。

阿周博客 3927

RV1106嵌入式视觉实战:OpenCV交叉编译与摄像头图像传输

在嵌入式Linux开发中,交叉编译是连接PC与ARM设备的关键技术,它允许在x86主机上生成ARM可执行文件。其原理是通过专用工具链处理架构差异,技术价值在于高效利用资源,尤其适合低功耗视觉设备。典型应用场景包括智能门铃、猫眼等电池供电设备,需要实时图像采集与传输。OpenCV作为通用图像处理库,在RV1106上需通过交叉编译部署,并适配V4L2接口调用摄像头。图像传输方案如MJPEG压缩可降低带宽,确保稳定帧率。本文围绕RV1106、OpenCV摄像头调用和图像传输,分享实操细节与优化技巧。

weixin_42713608的博客 226

libjpeg编译使用详解

一、交叉编译libjpeg # tar -xzvf libjpeg-turbo-1.2.1.tar.gz #cd libjpeg-turbo-1.2.1 #mkdir tmp # ./configure --prefix=$PWD/tmp --host=arm-linux #make #make install /* 会...

weixin_33795806的博客 660

龙芯2K0300上交叉编译OpenCV实战指南

OpenCV作为计算机视觉核心库,其跨平台编译本质是构建指令集对齐的二进制生态。在LoongArch64等国产指令集平台上,传统x86/ARM预编译包因ABI、内核头文件、glibc版本及硬件特性(如LASX SIMD、字节对齐)不兼容而失效。交叉编译并非简单更换编译器,而是需协同重构工具链、第三方依赖(libjpeg/libpng/ffmpeg)与OpenCV本体,确保从C运行时到DNN模块的全栈LoongArch64原生支持。该技术路径广泛适用于国产化替代、边缘AI推理及离线嵌入式部署场景,尤其支撑YO

weixin_29164497的博客 305

OpenCV依赖库源码集成与ZynqMP平台交叉编译实战

OpenCV的功能实现高度依赖底层图像与多媒体处理库。在Xilinx ZynqMP等嵌入式平台部署时,必须对zlib、libpng、jpeg、tiff、x264、xvidcore、v4l、ffmpeg等关键依赖库进行源码级交叉编译与集成。这些库分别支撑PNG无损压缩、JPEG有损编码、TIFF多页存储、H.264视频压缩及V4L2摄像头采集等核心功能。graph TDB --> J[DEFLATE/LZ77压缩]C --> BD --> B各库通过算法特性协同工作:zlib提供通用压缩基础;

weixin_29840475的博客 1366

预处理优化——cmake 编译opencv-3.4.3与libjpeg-turbo-2.0.1库

       opencv底层默认使用libjpeg做图像解码,libjpeg-turbo也是一种JPEG图像编解码器,解码速度通常是libjpeg的2-6倍,在条件相同的系统上,libjpeg-turbo可以在很大程度上优于libjpeg,这得益于其高度优化的Huffman编码。libjpeg-turbo的性能可以与专有的高速JPEG编解码器媲美,多线程的libjpeg-turbo解码速度与GP...

Gotta-C的博客 5186

RK3568交叉编译OpenCV4全指南:从工具链到部署优化

在嵌入式Linux开发中,交叉编译是连接高性能主机与资源受限ARM板卡的关键技术。它允许开发者在x86_64环境下构建面向ARM64架构的原生程序,从而高效利用主机算力并控制系统版本。对于图像处理任务,OpenCV是应用最广泛的计算机视觉库,但其默认预编译包往往未针对特定处理器优化,导致在RK3568等Cortex-A55平台上性能受限。通过合理配置CMake工具链,并开启NEON等ARMv8-A指令集优化,可显著提升图像处理效率。本文面向RK3568平台,详细阐述从交叉编译工具链搭建、OpenCV 4.x

weixin_29193259的博客 104

从零构建嵌入式视觉处理流水线:OpenCV静态库与FFmpeg/Libjpeg的深度整合指南

本文详细介绍了如何在ARM平台上从零构建高效的嵌入式视觉处理流水线,重点讲解OpenCV静态库与FFmpeg/Libjpeg的深度整合方法。通过交叉编译环境搭建、依赖库优化配置及实战案例,帮助开发者解决嵌入式视觉应用中的存储限制和性能挑战,实现紧凑高效的视觉处理框架。

weixin_29233333的博客 340

libjpeg-turbo 交叉编译aarch64 6.5.0 jpeg图像加速库

libjpeg-turbo 交叉编译aarch64 6.5.0 jpeg图像加速库

Linux应用开发-libjpeg库交叉编译与使用.pdf

在开发板上如果想要显示jpeg格式的图片,必须用到libjpeg库,不可能自己去编写jpg的解码代码。 libjpeg是一个完全用C语言编写的库,包含了被广泛使用的JPEG解码、JPEG编码和其他的JPEG功能的实现。这个库由独立JPEG工作组维护。

嵌入式开发之Opencv(二)JPEG解码加速

参考文档 libjpeg-turbo github主页 JPEG高速低画质选项设置 Speed-Up JPEG Encode/Decode Processing for OpenCV using libjpeg-turbo libjpeg-turbo性能报告与建议 libjpeg对于(I)DCT Scale的支持和快速实现 libjpeg-turbo介绍 libjpeg-tur...

sanallen的专栏 6845

别只会‘pip install’了!当Python报错找不到‘pkg_resources’时,你的setuptools可能出大问题

本文深入解析Python开发中常见的`ModuleNotFoundError: No module named 'pkg_resources'`错误,揭示其背后的setuptools依赖问题。通过系统化的诊断与修复指南,帮助开发者理解Python包管理机制,并提供从基础到高级的解决方案,确保pip和setuptools的正常运行。

weixin_42523711的博客 433

告别依赖地狱:用Buildroot一键搞定OpenCV 4.x在ARM板上的交叉编译环境

本文介绍如何利用Buildroot一键解决OpenCV 4.x在ARM板上的交叉编译环境搭建问题,告别传统手动解决依赖的繁琐过程。通过Buildroot自动化管理依赖和工具链,结合定制化OpenCV编译策略,显著提升开发效率并避免版本冲突。

weixin_30374009的博客 457

MOOS-ivp 实验三 MOOS简介(1)

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录系列文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例

weixin_44151170的博客 7434

mtk-drm初始化

mtk-drm初始化走读

zhexingsunba的博客 4930

巧用Buildroot:一站式解决OpenCV嵌入式编译依赖难题

本文详细介绍了如何使用Buildroot一站式解决嵌入式平台OpenCV编译的依赖难题。通过自动化处理ffmpeg、libjpeg等复杂依赖,Buildroot极大简化了交叉编译流程,帮助开发者快速构建包含完整OpenCV环境的嵌入式Linux系统,并支持自定义版本编译,是提升嵌入式视觉开发效率的利器。

nft7creator的博客 456

SAP生产版本导入避坑大全:从‘黄灯’到‘绿灯’,详解CM_FV_MKAL_CONSISTENCY_CHECK检查函数

本文深入解析SAP生产版本导入过程中的常见问题,特别是通过`CM_FV_MKAL_CONSISTENCY_CHECK`检查函数从‘黄灯’异常到‘绿灯’正常的修复方法。涵盖静态与动态校验机制、典型异常场景诊断及批量导入最佳实践,帮助SAP运维人员高效解决生产版本管理难题。

weixin_30568591的博客 387

Ubuntu 源码交叉编译libjpeg-turbo

Ubuntu 源码交叉编译libjpeg-turbo 技术标签: libjpeg-turbo 安装流程 安装nasm 源码编译安装libjpeg-turbo-2.0.1 源码交叉编译安装opencv3.4.6 一. 安装nasm 1.终端中指令安装(推荐) sudo apt install nasm 2.或者源码编译安装 https://www.nasm.us/pub/nasm/releasebuilds/2.14.02/ 二. 源码编译安装libjpeg-turbo-2.0.1 1.下载libjpeg-

weixin_38387493的博客 570

图神经网络学习笔记-点云数据处理(专题七)

本教程解释了如何利用图神经网络(Graph Neural Networks,GNNs)来处理和训练点云数据。尽管点云默认情况下不具有图结构,但我们可以利用 PyG 的转换工具,将其转化为适合 PyG 所提供的全套 GNN 模型的形式。关键思想是从点云数据中创建一个,通过 GNN 的消息传递机制,从中学习有意义的局部几何结构。这些点的表示可以被用于例如点云分类或分割等任务。

351

我的AI个人公司成立:基于Skills与Qwen大模型的智能问答平台实战开发+龙虾团队

微学AI推出数字员工矩阵,包含10个核心AI角色(总经理、秘书、工程师等),每个角色具备专属技能模块。系统采用FastAPI+Vue3技术栈,核心功能包括:基于SkillLoader的动态技能管理(支持脚本执行和文档加载)、WebSocket流式输出、多轮对话上下文管理。通过模块化架构实现AI自驱协作,可自主完成从需求分析到开发落地的全流程。项目亮点在于声明式技能配置和实时交互能力,打破传统办公壁垒,提升工作效率。

微学AI的博客 1623

opencv交叉编译和遇到的问题

flyfish

二分掌柜的 6472

大数据知识面试题-通用(2026版)

序列号 内容 链接 1 大数据知识面试题-通用(2022版) 待续… 2 大数据知识面试题-Hadoop(2022版) 待续… 3 大数据知识面试题-MapReduce和yarn(2022版) 待续… 4 大数据知识面试题-Zookeepr (2022版) 待续… 5 大数据知识面试题-Hive (2022版) 待续… 6 大数据知识面试题-Flume(2022版) 待续… 7 大数据知识面试题-Hbase(2022版) 待续… 8 大数据知识面试题-sqoop(....

拉格朗日的学习笔记 2万+

Milk-V Duo S开发板AI视觉应用与环境搭建指南

嵌入式开发板作为边缘计算的重要载体,通过专用加速单元实现高效AI推理。Milk-V Duo S搭载SG2000芯片和TPU加速器,支持Linux系统运行,特别适合计算机视觉和多媒体处理场景。开发环境搭建涉及系统镜像烧录、网络配置和交叉编译工具链部署,其中Buildroot定制化系统可灵活集成OpenCV等计算机视觉库。该开发板在人脸检测、目标识别等AI视觉任务中表现出色,配合SCRFD模型可实现15FPS的实时处理。通过调整模型分辨率、线程并行度和ISP参数,开发者能进一步优化边缘设备的AI推理性能。

weixin_30924239的博客 391

2026年华为od机试真题题库

OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)

面试高手的博客 19万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

巧用Buildroot:一站式解决OpenCV嵌入式交叉编译依赖难题

本文详细介绍了如何利用Buildroot一站式解决OpenCV在嵌入式平台交叉编译中的复杂依赖问题。通过自动化构建工具链和依赖库,该方法能有效规避手动编译ffmpeg、libjpeg等第三方库时的版本冲突和路径难题,大幅提升开发效率,让开发者专注于视觉算法与应用开发。

yoga7的博客 688

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

上一篇: Pytorch转tflite
下一篇: 调用mosquitto发布消息
IT修道者
IT修道者 领域专家: 人工智能技术领域 领域专家: 人工智能技术领域
博客等级 码龄17年 326粉丝 95原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值