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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/48112.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

echarts实现3d柱状效果

代码如下&#xff0c;单个的调第一个方法&#xff0c;多个柱状的调第二个方法&#xff0c;具体情况修改参数或者二次开发即可 //3d柱状图 export function getEcharts3DBar (xAxisData:string[][name1,name2,name3], data:number[][1,2,3], colorObj:IBaseObject{topStartColo…

Go的入门

一、GO简介 Go语言&#xff08;也叫 Golang&#xff09;是Google开发的开源编程语言。 1. 语言特性 Go 语法简洁&#xff0c;上手容易&#xff0c;快速编译&#xff0c;支持跨平台开发&#xff0c;自动垃圾回收机制&#xff0c;天生的并发特性&#xff0c;更好地利用大量的分…

服务器相关总结

文章目录 conda 安装镜像源总结&#xff08;手动加&#xff09;创建环境安装pytorch安装transformers conda 安装 查看conda版本 conda --version查看当前conda的配置文件位置 conda config --show编辑配置文件,默认路径是~/condarc vim ~/.condarc 在channels字段添加新的…

通过albumentation对目标检测进行数据增强(简单直接)

albumentation官方文档看不懂&#xff1f;xml文件不知道如何操作&#xff1f;下面只需要修改部分代码即可上手使用 要使用这个方法之前需要按照albumentation这个库还有一些辅助库,自己看着来安装就行 pip install albumentation pip install opencv-python pip install json…

MKS流量计软件MFC通讯驱动使用于C和P系列MFC控制USB接口W10系统

MKS流量计软件MFC通讯驱动使用于C和P系列MFC控制USB接口W10系统

使用VuePress-Reco快速搭建博客(保姆级)

简介&#xff1a;VuePress-Reco 一款简洁的 vuepress 博客 & 文档 主题&#xff0c;可以自由搭建自己的风格&#xff0c;比较方便简洁。 链接&#xff1a;vuepress-reco 准备环境&#xff1a; Node.Js >20.5.0&#xff0c;Npm > 10.8.2 OR Yarn > 1.22.19 注&am…

Android C++系列:Linux信号(二)

PCB的信号集 如果在进程解除对某信号的阻塞之前这种信号产生过多次,将如何处理?POSIX.1允 许系统递送该信号一次或多次。Linux是这样实现的:常规信号在递达之前产生多次只 计一次,而实时信号在递达之前产生多次可以依次放在一个队列里。本文不讨论实时信 号。每个信号只有一…

Kafka介绍及Go操作kafka详解

文章目录 Kafka介绍及Go操作kafka详解项目背景解决方案面临的问题业界方案ELKELK方案的问题日志收集系统架构设计架构设计组件介绍将学到的技能消息队列的通信模型点对点模式 queue发布/订阅 topicKafka介绍Kafka的架构图工作流程选择partition的原则ACK应答机制Topic和数据日志…

0718,TCP协议,三次握手,四次挥手

目录 上课喵&#xff1a; TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;的状态迁移图 TCP连接的状态迁移图 状态迁移说明&#xff1a; 注意&#xff1a; big_htonl.c 字节序转换 addr.c IP地址的转换 作业喵&#xff1a; …

django命令

Django 的命令行工具 django-admin&#xff08;或 manage.py 中的 manage 函数&#xff09;提供了一系列的命令&#xff0c;用于执行各种管理任务。 1. check: 检查项目的 full 路径&#xff0c;确保没有错误配置。 2. compilemessages: 编译 .po 文件中的翻译&#xff0c;生…

Python面试整理-Python中的控制流语句

在Python中,控制流语句用于根据特定的条件或逻辑来控制程序的执行流程。主要的控制流语句包括条件判断(if)、循环(for 和 while)以及其他辅助语句如 break, continue, 和 pass。下面详细介绍这些控制流语句: 1. 条件判断(if 语句) if 语句用于根据一个或多个条件来执行…

前端组件化实践:Vue自定义加载Loading组件的设计与实现

摘要 随着前端技术的飞速发展&#xff0c;组件化开发已成为提高开发效率、降低维护成本的重要方法。本文介绍了前端Vue自定义加载Loading组件的设计思路与实现过程&#xff0c;该组件通过设置gif动画实现加载效果&#xff0c;可广泛应用于页面请求加载场景。通过该组件的实践&…

2024年度上半年中国汽车保值率报告

来源&#xff1a;中国汽车流通协会&精真估 近期历史回顾&#xff1a; 2024上半年房地产企业数智化转型报告.pdf 2024国产院线电影路演数据洞察报告.pdf 空间数据智能大模型研究-2024年中国空间数据智能战略发展白皮书.pdf 2024年全球资产管理报告 2024年中型律师事务所的法…

VMware中Ubuntu磁盘空间的清理

最近发现Ubuntu占用空间过大&#xff0c;在网上找了一些方法&#xff0c;在这里总结一下。 1.删除快照 把不需要的快照删除&#xff0c;但要注意删除快照可能会影响到后续的快照链。每个快照依赖于前面的快照。如果删除一个中间快照&#xff0c;虚拟机可能无法找到完整的差异…

深入解析Linux文件权限管理:掌握`chmod`和`chown`命令

深入解析Linux文件权限管理&#xff1a;掌握chmod和chown命令 深入解析Linux文件权限管理&#xff1a;掌握chmod和chown命令 大纲&#xff1a;摘要&#xff1a;内容&#xff1a; 1. 引言2. 理解文件权限3. 使用chmod命令4. 使用chown命令5. 综合应用6. 常见问题与解决方案7. 结…

零基础入门:创建一个简单的Python爬虫管理系统

摘要&#xff1a; 本文将手把手教你&#xff0c;从零开始构建一个简易的Python爬虫管理系统&#xff0c;无需编程基础&#xff0c;轻松掌握数据抓取技巧。通过实战演练&#xff0c;你将学会设置项目、编写基本爬虫代码、管理爬取任务与数据&#xff0c;为个人研究或企业需求奠…

第2章 矩阵

A 乘以此列向量&#xff0c;1的位置依次往下&#xff0c;所以A的列向量全为0 B C、D 取BE 要统一

面经学习(厦门安全狗实习)

个人评价 安全狗主要还是做安全的&#xff0c;所以java开发约等于小厂。后端开发主要使用的技术栈技术sshjsp。 技术可谓是先当的古老&#xff0c;本次面试内容主要以项目为主。也是首次收到面试官的夸奖&#xff0c;面试下来也是非常开心的。 介绍一下实习项目吧&#xff1…

通过libx246 libfaac转换推送RTMP音视频直播流

一、RTMP简介及rtmplib库&#xff1a; RTMP协议是Real Time Message Protocol(实时信息传输协议)的缩写&#xff0c;它是由Adobe公司提出的一种应用层的协议&#xff0c;用来解决多媒体数据传输流的多路复用&#xff08;Multiplexing&#xff09;和分包&#xff08;packetizing…

【体外诊断】ARM/X86+FPGA嵌入式计算机在免疫分析设备中的应用

体外诊断 信迈提供基于Intel平台、AMD平台、NXP平台的核心板、2.5寸主板、Mini-ITX主板、4寸主板、PICO-ITX主板&#xff0c;以及嵌入式准系统等计算机硬件。产品支持GAHDMI等独立双显&#xff0c;提供丰富串口、USB、GPIO、PCIe扩展接口等I/O接口&#xff0c;扩展性强&#xf…