当前位置: 首页 > 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…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

elementUI点击浏览table所选行数据查看文档

项目场景&#xff1a; table按照要求特定的数据变成按钮可以点击 解决方案&#xff1a; <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...

Ubuntu系统复制(U盘-电脑硬盘)

所需环境 电脑自带硬盘&#xff1a;1块 (1T) U盘1&#xff1a;Ubuntu系统引导盘&#xff08;用于“U盘2”复制到“电脑自带硬盘”&#xff09; U盘2&#xff1a;Ubuntu系统盘&#xff08;1T&#xff0c;用于被复制&#xff09; &#xff01;&#xff01;&#xff01;建议“电脑…...

篇章二 论坛系统——系统设计

目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...