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

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

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

weixin_30374009的博客 457

千兆以太网的接收和crc校验

解析该以太网帧,包括统计该以太网帧长度+过滤功能(端口号对不对,是否为udp协议)+CRC校验,将解析结果存入状态fifo,一旦状态fifo开始有数,就开始开启读过程,读过程开始时,首先读状态fifo,根据从状态fifo里面读出的以太网帧长度,来读数据fifo(这样能够防止跨帧读),然后在根据状态fifo里面读出的crc校验正确标志和过滤标志,来确定是否将数据fifo读出来的数据送给下一个模块。改掉之后在抓一下,可以看到抓出来的数据完全正确,从最后开始看,除去4个crc校验的尾巴,数据是到255结束的。

weixin_45284871的博客 2738

RK3568/RK3588之修改8250驱动实现RS485收发的自动切换

在串口发送前,若为485,则将控制引脚拉为发送状态,在发送后,循环查看是否发送完成,若发送完成则将引脚置回读状态,如此一来,就能实现在内核测控制方向切换,而不会因为延时造成数据丢失,经过测试此办法可行。全部修改完成后,重新编译生成内核文件和设备树文件,烧写到板子上即可。

哒宰的博客 3112

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

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

nft7creator的博客 456

IC版图设计布局经验90条!

13 如果一个cell调用其它cell,被调用的cell的vssx,vddx,vssb,vddb如果没有和外层cell连起来,要打上PIN,否则通不过diva检查.尽量在布局低层cell时就连起来。48 在匹配电路的mos管左右画上dummy,用poly,poly的尺寸与管子尺寸一样,dummy与相邻的第一个poly gate的间距等于poly gate之间的间距。8 更改cell时查看路径,一定要在正确的library下更改,以防copy过来的cell是在其他的library下,被改错。

weixin_44606964的博客 909

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

【100分】最长子字符串的长度

题目要求在一个环形字符串中找出字符 ‘o’ 出现了偶数次的最长子字符串长度。这里的字符串是一个环形的,即首尾相连。代码统计了字符串中字符 ‘o’ 的出现次数,并根据其奇偶性返回相应的最长子字符串长度。当 ‘o’ 的数量为偶数时,直接返回字符串长度;当 ‘o’ 的数量为奇数时,返回长度减去 1。给你一个字符串 s,字符串s首尾相连成一个环形 ,请你在环中找出 ‘o’ 字符出现了偶数次最长子字符串的长度。【最长子字符串的长度】

weixin_54707168的博客 896

Vue3 - 实现内网使用天地图离线地图,详解项目加载天地图的离线地图服务器部署与使用教程示例源码,vue3如何实现天地图的离线加载部署在内网访问(天地图资源下载/瓦片等流程教学,实现天地图各种功能)

Vue3中加载天地图的离线地图,天地图——内网使用离线地图,vue3+leaflet实现天地图离线访问,vue3项目中利用leaflet使用天地图,vue3项目中使用天地图离线地图,天地图离线瓦片的打包与发布(GeoServer)天地图离线瓦片数据下载及本地化部署,在内网中无法直接使用外网天地图资源怎么办,在vue3中openLayers加载地图 -使用天地图的瓦片数据。VUE3天地图离线怎么使用,内网部署天地图,天地图离线瓦片,部分瓦片数据,天地图如何离线,无需网络调用天地图API,vue天地图离线地图,

🏆 前端领域优质创作者 1万+

opencv交叉编译和遇到的问题

flyfish

二分掌柜的 6472

本地搭建 GitLab 14.1.0版本CI/CD

GitLab 镜像版本 gitlab/gitlab-ce:14.1.0-ce.0 GitLab Runner 镜像版本 gitlab/gitlab-runner:v14.1.0 搭建此套环境是在一台32G的windows电脑上安装的。 使用dokcer安装。 此外还涉及的软件Docker Desktop,WSL 安装GitLab 首先启动 dockcer,打开WSL 打开后 首先定义GitLab的持久化目录 export GITLAB_HOME=/srv/gitlab 然后运行安装GitLab的命令

知无涯 4491

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

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

weixin_30924239的博客 391

CKA-题库-简洁参考答案-反复练习20遍-必过!!!

新版CKA考试已于2020年9月1日正式上线! 考试模式:线上考试 考试时间:2小时 认证有效期:3年 软件版本:Kubernetes v1.19 重考政策:可接受1次重考 经验水平:中級 题目数量:17题 题库量小:随机的题目重复率极高 考试时可打开两个浏览器Tab,一个是考试窗口,一个用来查阅官方文档](https://kubernetes.io/docs/) 01 Task - 英文 Create a new ClusterRole named deployment-clusterrole tha.

随笔记录-分享&记忆 7315

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

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

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

yoga7的博客 688

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

上一篇: 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、付费专栏及课程。

余额充值