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

RK3588 编译opencvopencv_contrib记录

RK3588 编译opencv&opencv_contrib记录

  • 1. 下载文件
    • 1.1 opencv源码
    • 1.2 安装cmake
  • 2.开始编译
    • 2.1 提示缺少`boostdesc_bgm.i `等问题
    • 2.2 提示缺少某hpp头文件
    • 2.3 其它问题
  • 3. 设置环境变量
  • 4. 测试
  • 5.参考

1. 下载文件

1.1 opencv源码

需要opencv和opencv-contrib的版本号保持一致,如下载opencv-4.5.1和opencv_contrib-4.5.1。github链接如下:
opencv:https://github.com/opencv/opencv/releases
opencv-contrib:https://github.com/opencv/opencv_contrib/tags

1.2 安装cmake

sudo apt-get install cmake

2.开始编译

将opencv和opencv-contrib解压到指定路径,如:/opt/opencv_source。进入opencv文件夹,确认存在CmakeList.txt文件,而后新建文件夹build,进入文件夹。命令如下:

cd /opt/opencv_source/opencv
mkdir build
cd build

下面是重头戏:cmake编译,命令如下:

sudo cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/自行修改 -D OPENCV_EXTRA_MODULES_PATH=/自行修改 -D OPENCV_GENERATE_PKGCONFIG=ON -D BUILD_opencv_java=OFF -D BUILD_opencv_python3=ON -D WITH_OPENMP=OFF -D WITH_GSTREAMER_0_10=OFF -D WITH_VTK=OFF -D WITH_LIBV4L=ON -D WITH_OPENMP=ON -D WITH_OPENGL=ON -D WITH_TBB=ON -D BUILD_SHARED_LIBS=ON -D ENABLE_PIC=ON -D WITH_ARITH_DEC=ON -D WITH_ARITH_ENC=ON -D WITH_FFMPEG=ON -D WITH_GSTREAMER=ON -D WITH_IMGCODEC_HDR=ON -D WITH_IMGCODEC_PXM=ON -D WITH_IMGCODEC_SUNRASTER=ON -D WITH_JASPER=ON -D WITH_JPEG=ON -D WITH_LAPACK=ON -D WITH_PNG=ON -D WITH_QT=ON -D WITH_PTHREADS_PF=ON -D WITH_TIFF=ON -D WITH_WEBP=ON -D WITH_GTK=ON -D WITH_OPENCL=ON ..

编译参数官方解释:https://docs.opencv.org/4.x/db/d05/tutorial_config_reference.html

概要:

-D CMAKE_BUILD_TYPE=RELEASE \ '采用release格式编译'
-D CMAKE_INSTALL_PREFIX=/usr/local/opencv470 \ 'opencv的最终安装路径,推荐/use/local/使用时不需要有引号'
-D OPENCV_EXTRA_MODULES_PATH=~/opencv-contrib/modules\ 'opencv-contrib下modelus的绝对路径,使用时不需要有引号'
-D OPENCV_GENERATE_PKGCONFIG=ON \ '生成pkg-config文件,使编译成功后可以用指令pkg-config --cflags --libs opencv4来找到opencv'-D BUILD_opencv_java=OFF \ '是否编译java和python的版本,OFF为不编译,ON为编译,默认不编译'
-D BUILD_opencv_python3=ON \
-D BUILD_opencv_python2=ON \
-D BUILD_SHARED_LIBS=ON \ '用于指定是否构建动态链接库。当这个选项设置为ON时,cmake将生成共享库(.so文件),而不是静态库(.a文件)'
-D ENABLE_PIC=ON \ '用于指定是否生成位置无关代码。当这个选项设置为ON时,编译器将生成PIC,这样生成的代码可以在内存中的任何位置运行,而不需要重定位'-D WITH_OPENMP=OFF \ '以下是一些第三方的库函数,如果有特定的需求可自行更改,笔者列出的不多,如果你是新手且板子和系统版本和笔者一样,可以和我用一样的'
-D WITH_GSTREAMER_0_10=OFF \
-D WITH_VTK=OFF \
-D WITH_LIBV4L=ON \
-D WITH_OPENMP=ON \
-D WITH_OPENGL=ON \
-D WITH_TBB=ON \
-D WITH_ARITH_DEC=ON \
-D WITH_ARITH_ENC=ON \
-D WITH_FFMPEG=ON \
-D WITH_GSTREAMER=ON \
-D WITH_IMGCODEC_HDR=ON \
-D WITH_IMGCODEC_PXM=ON \
-D WITH_IMGCODEC_SUNRASTER=ON \
-D WITH_JASPER=ON \
-D WITH_JPEG=ON \
-D WITH_LAPACK=ON \
-D WITH_PNG=ON \
-D WITH_QT=ON \
-D WITH_PTHREADS_PF=ON \
-D WITH_TIFF=ON \
-D WITH_WEBP=ON \
-D WITH_GTK=ON \
-D WITH_OPENCL=ON .. '两个点的作用是提示cmake编译所需的CMakeLists.txt在这个目录的上级' 

编译过程很漫长,基本不会一次通过,需要耐心定位错误。我遇到的两个错误,都是由于下载不完全引起的:

2.1 提示缺少boostdesc_bgm.i 等问题

网络搜索并下载这些文件,放到指定目录。下载链接参考该博客。

2.2 提示缺少某hpp头文件

该文件不需要下载,可以在opencv文件夹中找到,将opencv-4.5.1/modules/features2d/目录下的文件复制到opencv_contrib-4.5.1/modules/xfeatures2d/test/文件夹下即可。同参考上一博客。

2.3 其它问题

如果还有其它问题,检查以下几个点:

  1. 是否在opencv目录下新建了build文件夹并在里面运行cmake
  2. opencv文件夹下是否有CMakeLists.txt
  3. opencv的版本和opencv-contrib版本是否一致
  4. opencv-contrib/modules的地址是否正确
  5. 是否能连接github并下载文件(出错概率最高)
  6. 报错后重新编译请删除原来build下的所有文件,可用sudo rm -rf *来实现

如果上述问题确认无误但还是出错,请查看cmake后的消息中含有error,failed,not等关键字的信息,然后百度或谷歌,如果成功编译后在控制台继续输入make -j8,然后经过漫长的等待,完成后再输入make install,完成后就可以去你指定的安装目录下查看了。

整个编译流程的命令行代码如下:

cd /opt/opencv_source/opencv
mkdir build
cd build
sudo cmake -D..#省略,见上文
sudo make -j8
sudo make install

3. 设置环境变量

上述工作做完后还需要设置环境变量方便程序识别,命令如下;

export LD_LIBRARY_PATH=/usr/local/lib/  #示例,修改为自己的opencv安装地址(上文指定的安装目录)export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/lib/pkgconfig #示例,请修改为自己的opencv安装地址(上文指定的安装目录)export PKG_CONFIG_LIBDIR=$PKG_CONFIG_LIBDIR:/usr/lib/ #示例,请修改为自己的opencv安装地址(上文指定的安装目录)

4. 测试

用C++测试opencv,调用摄像头并在屏幕上显示内容,使用USB免驱摄像头。
先用v4l2-ctl --list-devices查看自己摄像头的编号,然后替换掉cpp文件中VideoCapture cap(0)的数字,新建camera_test.cpp文件,输入:

#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{cout << cv::getBuildInformation() << endl //查看一下opencv的编译信息,记得保存下来好好看,以后遇到路径问题以这个为准VideoCapture cap(0); // 更改自己的摄像头编号if(!cap.isOpened()){cout << "无法打开摄像头" << endl;return -1;}// 创建窗口namedWindow("摄像头", WINDOW_AUTOSIZE);while(true){Mat frame;// 从摄像头捕获一帧图像cap >> frame;if(frame.empty())break;// 在窗口中显示图像imshow("摄像头", frame);// 按下 ESC 键退出if(waitKey(30) == 27)break;}// 释放资源cap.release();destroyAllWindows();return 0;
}

然后在同一文件夹下新建CMakeLists.txt,输入:

cmake_minimum_required(VERSION 3.1)
project(camera_test)
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
add_executable(camera_test camera_test.cpp)
target_link_libraries(camera_test ${OpenCV_LIBS})

可正常显示摄像头画面,则测试通过。

5.参考

  1. https://www.cnblogs.com/Rubyen2333/p/17337164.html
  2. https://cloud.tencent.com/developer/article/2397211
  3. https://www.cnblogs.com/zhang-hongbo/p/12859405.html

相关文章:

RK3588 编译opencvopencv_contrib记录

RK3588 编译opencv&opencv_contrib记录 1. 下载文件1.1 opencv源码1.2 安装cmake 2.开始编译2.1 提示缺少boostdesc_bgm.i 等问题2.2 提示缺少某hpp头文件2.3 其它问题 3. 设置环境变量4. 测试5.参考 1. 下载文件 1.1 opencv源码 需要opencv和opencv-contrib的版本号保持…...

Eureka: 微服务架构中的服务发现与注册实践

Eureka介绍与使用教程 你好&#xff0c;我是悦创。 Eureka 是 Netflix 开发的一款服务发现&#xff08;Service Discovery&#xff09;工具&#xff0c;它主要用于云中基于微服务架构的应用程序。Eureka使服务实例能够动态地注册自己&#xff0c;而其他服务实例可以通过 Eure…...

8、添加第三方包

目录 1、安装Django Debug Toolbar Django的一个优势就是有丰富的第三方包生态系统。这些由社区开发的包&#xff0c;可以用来快速扩展应用程序的功能集 1、安装Django Debug Toolbar Django Debug Toolbar位于名列前三的第三方包之一 这是一个用于调试Debug Web应用程序的有…...

【算法】算法模板

算法模板 文章目录 算法模板简介数组字符串列表数学树图动态规划 简介 博主在LeetCode网站中学习算法的过程中使用到并总结的算法模板&#xff0c;在算法方面算是刚过初学者阶段&#xff0c;竞赛分数仅2000。 为了节省读者的宝贵时间&#xff0c;部分基础的算法与模板未列出。…...

特征工程方法总结

方法有以下这些 首先看数据有没有重复值、缺失值情况 离散&#xff1a;独热 连续变量&#xff1a;离散化&#xff08;也成为分箱&#xff09; 作用&#xff1a;1.消除异常值影响 2.引入非线性因素&#xff0c;提升模型表现能力 3.缺点是会损失一些信息 怎么分&#xff1a;…...

Unity | AssetBundle

1 定义 Unity中的一种特殊资源包格式&#xff0c;用于存储和分发游戏资源。这些资源可以包括模型、纹理、音频文件、预制体、场景等。 AssetBundle允许开发者在游戏运行时动态加载和卸载资源&#xff0c;从而实现灵活的资源管理。 2 使用场景 1、资源管理 有效管理游戏中的资…...

【虚幻引擎】C++网络通信TCP和HTTP实战开发全流程,以接入科大讯飞星火大模型和文心一言千帆大模型为案例讲解

本套课程介绍了使用我们的虚幻C去写开发我们的插件开发&#xff0c;如何使用我们的虚幻C 封装我们的TCP和HTTP&#xff0c;如何使用的我们虚幻C子系统&#xff0c;如何根据第三方文档去写接口请求&#xff0c;如何通过我们的加密算法去签名我们的URL&#xff0c;如何声明我们的…...

.NET单元测试使用AutoFixture按需填充的方法总结

AutoFixture是一个.NET库&#xff0c;旨在简化单元测试中的数据设置过程。通过自动生成测试数据&#xff0c;它帮助开发者减少测试代码的编写量&#xff0c;使得单元测试更加简洁、易读和易维护。AutoFixture可以用于任何.NET测试框架&#xff0c;如xUnit、NUnit或MSTest。 默…...

求职学习day5

安排明天hr面 投一下平安可能。 hr面准备&#xff0c;复习java核心技术&#xff0c;复习java项目。 正视自己&#xff0c;调整心态。 也是很早接触了javaguide但是没有持续学习&#xff0c;项目介绍 | JavaGuide&#xff0c;面试前复习一下感觉还是很有收获的。 还有一些…...

微服务常用的中间件有哪些?都有什么用途?

前言 最近整理一下我们的项目使用了哪些中间件&#xff0c;借此机会也来分享一下&#xff0c;在微服务架构中我们常用的那些中间件&#xff0c;都有什么作用&#xff0c;为什么要使用中间件。 消息中间件-RocketMQ 比如RocketMQ&#xff0c;RocketMQ 是一个开源的分布式消息…...

华为云认证

华为云认证 首页 云原生 DevOps工作级开发者认证&#xff1a;HCCDP – Cloud Native DevOps 对云上敏捷开发感兴趣的人员&#xff0c;培训DevOps的理论知识及在云端交付软件全生命周期的实操能力。 DevOps...

【Linux学习】常用基本指令

&#x1f525;个人主页&#xff1a; Forcible Bug Maker &#x1f525;专栏&#xff1a;Linux学习 目录 &#x1f308;前言&#x1f525;XShell的一些使用查看Linux主机IP使用XShell登录主机XShell下的复制粘贴 &#x1f525;Linux下常用基本指令ls指令pwd指令cd指定touch指令…...

windows上安装Apache

安装前须知&#xff1a; 下载并安装&#xff0c;如未完成&#xff0c;请访问下载页面。安装Apache前需要安装Visual C Redistributable for Visual Studio 2015-2022 x64。 解压与配置&#xff1a; 将Apache24文件夹解压至C:\Apache24&#xff08;这是配置中的ServerRoot&am…...

wps office 2019 Pro Plus 集成序列号Vba安装版教程

前言 wps office 2019专业增强版含无云版是一款非常方便的办公软件&#xff0c;我们在日常的工作中总会碰到需要使用WPS的时候&#xff0c;它能为我们提供更好的文档编写帮助我们更好的去阅读PDF等多种格式的文档&#xff0c;使用起来非常的快捷方便。使用某银行专业增强版制作…...

院内影像一体化平台PACS源码,C#语言的PACS/RIS系统,二级医院应用案例

全院级PACS系统源码&#xff0c;一体化应用系统整合&#xff0c;满足放射、超声、内窥镜中心、病理、检验等多个科室的工作流程和需求&#xff0c;为不同科室提供专业的解决方案&#xff0c;实现了全院乃至区域内信息互联互通、数据统一存储与管理等功能&#xff0c;做到以病人…...

基于java的设计模式学习

PS &#xff1a;以作者的亲身来看&#xff0c;这东西对于初学者来说有用但不多&#xff0c;这些东西&#xff0c;更像一种经验的总结&#xff0c;在平时开发当中一般是用不到的&#xff0c;因此站在这个角度上用处不大。 1.工厂模式 1.1 简单工厂模式 我们把new 对象逻辑封装…...

组合数学+费用背包+刷表,G2 - Playlist for Polycarp (hard version)

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 G2 - Playlist for Polycarp (hard version) 二、解题报告 1、思路分析 一…...

阿尔泰科技利用485模块搭建自动灌溉系统实现远程控制

自动灌溉系统又叫土壤墒情监控系统&#xff0c;土壤墒情监控系统主要实现固定站无人值守情况下的土壤墒情数据的自动采集和无线传输&#xff0c;数据在监控中心自动接收入库&#xff1b;可以实现24小时连续在线监控并将监控数据通过有线、无线等传输方式实时传输到监控中心生成…...

Python正则表达式中的分组

表达式中的分组 它是可以通过" () “来进行分组&#xff0c;更专业的表达就是捕获组&#xff0c;每个完整的” () “可以分为一组&#xff0c;同时&#xff0c;” () “中还可以嵌套” () "&#xff0c;即组之间还可以存在更小的组 概念 1、当我们在一个正则表达式…...

openstack设置IP直接登录,不需要加dashboard后缀

openstack 实验环境&#xff0c;openstack-t版&#xff0c;centos2009 修改配置文件 [rootcontroller ~]# vim /WEBROOT /etc/openstack-dashboard/local_settings #将dashboard去掉 WEBROOT /dashboard/ #改为 WEBROOT /[rootcontroller ~]# vim /etc/httpd/conf.d/openst…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...