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

ubuntu下利用Qt添加相机设备并运行arm程序

一、编译x86-64平台的opencv demo

紧接上一篇,我电脑里现在同时存在两个版本的opencv库,一个是基于x86-64平台的3.4.11库,一个是基于arm平台的4.7.0库,现在我正常运行opencv的demo,直接报错:没有找到oencv4.7.0的库,这是因为之前编译arm架构的opencv 4.7.0的库时,在/usr/local/lib下生成了4.7.0版本的cmake文件夹,而opencv的demo下的CMakeisets.txt里的语句:find_package(OpenCV REQUIRED)会搜索当前opencv目录下的.cmake文件,cmake文件夹下存在该文件:

这里要做的就是把/uar/local/lib下的cmake文件夹删除即可。

find_package()的具体搜索方法见以下链接:

【CMake】find_package介绍-定位外部依赖_findpackage config模式-CSDN博客

 常规的opencv demo对应的CMakeLIsts.txt语句:

cmake_minimum_required( VERSION 3.1 )# 声明一个 cmake 工程
project( main )# 设置编译模式
set( CMAKE_BUILD_TYPE "Release" )#添加OPENCV库
#指定OpenCV版本,代码如下
#find_package(OpenCV 3.3 REQUIRED)
#如果不需要指定OpenCV版本,代码如下
find_package(OpenCV REQUIRED)#添加OpenCV头文件
include_directories(${OpenCV_INCLUDE_DIRS})#显示OpenCV_INCLUDE_DIRS的值
#message(${OpenCV_INCLUDE_DIRS})# 添加一个可执行程序
# 语法:add_executable( 程序名 源代码文件 )
add_executable( main main.cpp )# 将库文件链接到可执行程序上
target_link_libraries( main  ${OpenCV_LIBS})install(TARGETS main DESTINATION /home/user)

二、编译arm版本的qt

具体的编译方法建议下链接:

为RK3568或RK3288开发板创建交叉编译环境{采用amd64的ubuntu系统配置交叉编译arm64开发环境}(保姆级包括安装QT)超详细记录版_rk3568交叉编译工具链-CSDN博客

qt ubuntu 20.04 交叉编译_ubuntu qt交叉编译-CSDN博客

配置好arm编译器后,用qt打开opencv工程,编译一直报opencv函数的错误,这是因为find_package()找不到具体的opencv路径,因为我的opencv不是放在/usr目录下,此时只需要在fina_package()前面加上 :

set(OpenCV_DIR /home/vensin/workspace/623/opencv/opencv-4.7.0/build)

即可编译成功,注意:此时运行qt是无法直接得出结果的,因为在x86-64平台无法运行arm程序。

cmake_minimum_required( VERSION 3.1 )# 声明一个 cmake 工程
project( main )# 设置编译模式
set( CMAKE_BUILD_TYPE "Release" ) #Debug Release#添加OPENCV库
#指定OpenCV版本,代码如下
#find_package(OpenCV 3.3 REQUIRED)
#如果不需要指定OpenCV版本,代码如下
set(OpenCV_DIR /home/vensin/workspace/623/opencv/opencv-4.7.0/build)
find_package(OpenCV REQUIRED)#添加OpenCV头文件
include_directories(${OpenCV_INCLUDE_DIRS})#显示OpenCV_INCLUDE_DIRS的值
#message(${OpenCV_INCLUDE_DIRS})# 添加一个可执行程序
# 语法:add_executable( 程序名 源代码文件 )
add_executable( main main.cpp )# 将库文件链接到可执行程序上
target_link_libraries( main  ${OpenCV_LIBS})

三、添加设备并调试

具体添加相机设备的方法如下:

3:Ubuntu上配置QT交叉编译环境并编译QT程序到Jetson Orin Nano(ARM)_ubuntu安装qt jeston orin nano opencv-CSDN博客

这里有几个细节要注意:

1.需要的话要在GDB server executable中加入/usr/bin/gdbserver:

2.必须在CMakeLists.txt 中加入:

install(TARGETS main DESTINATION /home/user)

否则Deploy All Projects会失败(这里的/home/user是rk3568板子上的路径);

3.下图中的Build & Run 、 运行->运行配置等设置如下(mrdvConfig是设备名):

cmake_minimum_required( VERSION 3.1 )# 声明一个 cmake 工程
project( main )# 设置编译模式
set( CMAKE_BUILD_TYPE "Release" ) #Debug Release#添加OPENCV库
#指定OpenCV版本,代码如下
#find_package(OpenCV 3.3 REQUIRED)
#如果不需要指定OpenCV版本,代码如下
set(OpenCV_DIR /home/vensin/workspace/623/opencv/opencv-4.7.0/build)
find_package(OpenCV REQUIRED)#添加OpenCV头文件
include_directories(${OpenCV_INCLUDE_DIRS})#显示OpenCV_INCLUDE_DIRS的值
#message(${OpenCV_INCLUDE_DIRS})# 添加一个可执行程序
# 语法:add_executable( 程序名 源代码文件 )
add_executable( main main.cpp )# 将库文件链接到可执行程序上
target_link_libraries( main  ${OpenCV_LIBS})install(TARGETS main DESTINATION /home/user)

4.这里如果将qt的编译模式修改为Debug则会出现opencv库错误的问题,这是因为之前在编译arm的opencv库的时候选择的是Release模式,所以如果要调试,则需要重新编译一份Debug模式的opencv的arm库。

做完以上步骤以后,运行程序会在板子的指定路径下生成可执行文件。

四、opencv库报错的问题

在用qt编译arm程序时,将qt编译器设置为Debug模式会报libopencv_gapi.so.4.7.0wrong format的错误,我还以为是opencv编译的时候

-D CMAKE_BUILD_TYPE=RELEASE

模式为Release的问题,于是我就把 -D CMAKE_BUILD_TYPE=DEBUG又编译了一遍opencv库,尴尬的是没用,两者编译出来的库是一样的,并没有release和debug的区别,只能继续找问题,既然库没问题,那就看是不是环境变量的问题:

这个LD_LIBRARY_PATH里面加入了当前opencv的include目录和lib,删掉include就可以了(lib后面我也删了)。

五、rk3568平台的远程调试

点击QT的调试,发现报错:

无法对板子程序进行调试。

后续解决办法为:

1.安装gdb-multiarch:

sudo apt-get install gdb-multiarch

2.创建新的Debugger, Path选择/usr/bin/gdb-multiarch,Name设为arm debug:

 arm平台的kits->Debugger选择上文创建的arm debug即可。

接下来调试成功:

http://www.lqws.cn/news/544321.html

相关文章:

  • GO 语言学习 之 变量和常量
  • 神经形态计算与人工智能的融合:从生物启发到智能跃迁的IT新纪元
  • 本地部署Dify+Ragflow及使用(一)
  • PHP语法基础篇(六):数组
  • 通达信 稳定盈利多维度趋势分析系统
  • 鸿蒙OS开发IoT控制应用:从入门到实践
  • 概述-2-MySQL安装及启动-1-Dcoker安装MySQL
  • vue将页面导出pdf,vue导出pdf ,使用html2canvas和jspdf组件
  • Jmeter并发测试和持续性压测
  • 手机屏亮点缺陷修复及相关液晶线路激光修复原理
  • 利用云雾自动化在智能无人水面航行器中实现自主碰撞检测和分类
  • UI前端大数据处理实战技巧:如何有效应对数据延迟与丢失?
  • PILCO: 基于模型的高效策略搜索方法原理解析
  • HarmonyOS 5智能单词应用开发:记忆卡(附:源码
  • JVM 的 Dump分析以及 GC 日志
  • Vulkan模型查看器设计:相机类与三维变换
  • 【Python数据库】Python连接3种数据库方法(SQLite\MySQL\PostgreSQL)
  • 人工智能-基础篇-4-人工智能AI、机器学习ML和深度学习DL之间的关系
  • 人工智能-基础篇-3-什么是深度学习?(DL,卷积神经网络CNN,循环神经网络RNN,Transformer等)
  • fish安装node.js环境
  • 【CMake基础入门教程】第八课:构建并导出可复用的 CMake 库(支持 find_package() 查找)
  • 视觉疲劳检测如何优化智能驾驶的险情管理
  • Java练习题精选16-20
  • C++01背包问题
  • 汇总表支持表头分组,查询组件查询框可以调整高度,DataEase开源BI工具v2.10.11 LTS版本发布
  • ESP32 008 MicroPython Web框架库 Microdot 实现的网络文件服务器
  • A Machine Learning Approach for Non-blind Image Deconvolution论文阅读
  • 金蝶云星空客户端自定义控件插件-WPF实现自定义控件
  • 电磁波是如何传递信息的?
  • 鸿蒙 List 组件解析:从基础列表到高性能界面开发指南