Ubuntu 18.04 LTS中cmake-gui编译opencv-3.4.16并供Qt Creator调用

2023-10-17 20:04

本文主要是介绍Ubuntu 18.04 LTS中cmake-gui编译opencv-3.4.16并供Qt Creator调用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、安装opencv

1.下载opencv-3.4.16的源码并解压
2.在解压后的文件夹内新建文件夹build以及opencv_install
3.启动cmake-gui并设置

sudo cmake-gui

(1)设置界面中source及build路径
在这里插入图片描述
(2)点击configure,选择第一个default项目,即默认本地编译器
在这里插入图片描述
(3)设置prefix,即安装路径
之前我在默认路径/usr/local/下已经安装交叉编译结果opencv-3.4.16-gcc-arm
这里我选择home文件夹
在这里插入图片描述
选择需要的库,我采用默认的。
博文(https://blog.csdn.net/zhiyuan2021/article/details/131407526)给了两个建议:
第一个建议是:在CMAKE_BUILD_TYPE 值处输入RELEASE,我查了一下,默认采用release方式编译,空着就行。
第二个建议是:在OPENCV_EXTRA_MODULES_PATH中填写opencv_contrib的路径,但我在configure时报错,好像是名称重复。等后面需要的时候,我再编译opencv_contrib吧。这次保留为空,这样configure就可以通过了。
在这里插入图片描述
也就是说,我没有采用这两个建议。

(4)依次点击configure, generate,之后关闭cmake-gui

4.进入opencv-3.4.16内的build文件夹,cmake-gui已经在其中生成了编译中间文件
执行:

sudo make -j4

耐心等待结束!!!

执行:

sudo make install

完成opencv安装。
注意:build文件夹不要删除,后期如果删除本次安装的opencv-3.14.16,可以再次进入它并执行

sudo make uninstall

5.设置 /etc/ld.so.conf.d/opencv.conf,否则在第二部分Qt Creator编译OpenCV程序环节会出现如下错误

报错:
…/lib/libopencv_core.so.3.4: cannot open shared object file: No such file or d…
原因是之前用cmake对opencv-3.4.16进行了交叉编译(详见本人博客),并设置了opencv.conf。
本地使用时的平台为x86_64,因此,需要修改 /etc/ld.so.conf.d/opencv.conf
参考博文:https://blog.csdn.net/rong11417/article/details/103905794
修改后的opencv.conf:
在这里插入图片描述
注意:交叉编译时,需要再改一下opencv.conf中的路径。

二、Qt Creator运行opencv程序

安装qt及qt creator详见本人博文。

1.qt creator建立纯c++工程
在这里插入图片描述记得选择编译器为qmake,否则工程中不会存在.pro文件,后期为工程添加头文件和库的路径时麻烦!!!
(坑:我之前选择了cmake,工程中存在CmakeLists.txt,我对它不熟,没有搞清楚如何添加路径。此外,网上大部分博文采用.pro文件的方式)
在这里插入图片描述
2.在main.cpp中写入opencv的程序
在这里插入图片描述

#include <iostream>using namespace std;
#include "opencv2/core/core.hpp"
#include "opencv2/opencv.hpp"
using namespace cv;int main()
{Mat img = imread("/home/lyc/gcc-arm-projects/opencvTest1017_V2/plane.jpg");imshow("plane", img);waitKey(0);//cout << "Hello World!" << endl;return 0;
}

注意:图片路径为绝对路径,之前用"plane.jpg"方式报imshow的width和height为0的错误,说明图片读取失败。

3.在.pro文件中设置包含的头文件和库的路径
在这里插入图片描述

TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG -= qtSOURCES += \main.cppINCLUDEPATH += /home/lyc/Exe/opencv-3.4.16-for-x86_64/opencv_install/include \/home/lyc/Exe/opencv-3.4.16-for-x86_64/opencv_install/include/opencv \/home/lyc/Exe/opencv-3.4.16-for-x86_64/opencv_install/include/opencv2LIBS += /home/lyc/Exe/opencv-3.4.16-for-x86_64/opencv_install/lib/libopencv_*
#LIBS += /home/lyc/Exe/opencv-3.4.16-for-x86_64/opencv_install/lib/lib*.so*

3.编译、运行工程
在这里插入图片描述
得到显示的图像
在这里插入图片描述至此,记录结束!!!

这篇关于Ubuntu 18.04 LTS中cmake-gui编译opencv-3.4.16并供Qt Creator调用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/227645

相关文章

Mybatis从3.4.0版本到3.5.7版本的迭代方法实现

《Mybatis从3.4.0版本到3.5.7版本的迭代方法实现》本文主要介绍了Mybatis从3.4.0版本到3.5.7版本的迭代方法实现,包括主要的功能增强、不兼容的更改和修复的错误,具有一定的参考... 目录一、3.4.01、主要的功能增强2、selectCursor example3、不兼容的更改二、

QT移植到RK3568开发板的方法步骤

《QT移植到RK3568开发板的方法步骤》本文主要介绍了QT移植到RK3568开发板的方法步骤,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录前言一、获取SDK1. 安装依赖2. 获取SDK资源包3. SDK工程目录介绍4. 获取补丁包二

Qt把文件夹从A移动到B的实现示例

《Qt把文件夹从A移动到B的实现示例》本文主要介绍了Qt把文件夹从A移动到B的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录如何移动一个文件? 如何移动文件夹(包含里面的全部内容):如何删除文件夹:QT 文件复制,移动(

Ubuntu中Nginx虚拟主机设置的项目实践

《Ubuntu中Nginx虚拟主机设置的项目实践》通过配置虚拟主机,可以在同一台服务器上运行多个独立的网站,本文主要介绍了Ubuntu中Nginx虚拟主机设置的项目实践,具有一定的参考价值,感兴趣的可... 目录简介安装 Nginx创建虚拟主机1. 创建网站目录2. 创建默认索引文件3. 配置 Nginx4

讯飞webapi语音识别接口调用示例代码(python)

《讯飞webapi语音识别接口调用示例代码(python)》:本文主要介绍如何使用Python3调用讯飞WebAPI语音识别接口,重点解决了在处理语音识别结果时判断是否为最后一帧的问题,通过运行代... 目录前言一、环境二、引入库三、代码实例四、运行结果五、总结前言基于python3 讯飞webAPI语音

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

Qt实现发送HTTP请求的示例详解

《Qt实现发送HTTP请求的示例详解》这篇文章主要为大家详细介绍了如何通过Qt实现发送HTTP请求,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、添加network模块2、包含改头文件3、创建网络访问管理器4、创建接口5、创建网络请求对象6、创建一个回复对

Ubuntu 22.04 服务器安装部署(nginx+postgresql)

《Ubuntu22.04服务器安装部署(nginx+postgresql)》Ubuntu22.04LTS是迄今为止最好的Ubuntu版本之一,很多linux的应用服务器都是选择的这个版本... 目录是什么让 Ubuntu 22.04 LTS 变得安全?更新了安全包linux 内核改进一、部署环境二、安装系统

Java中将异步调用转为同步的五种实现方法

《Java中将异步调用转为同步的五种实现方法》本文介绍了将异步调用转为同步阻塞模式的五种方法:wait/notify、ReentrantLock+Condition、Future、CountDownL... 目录异步与同步的核心区别方法一:使用wait/notify + synchronized代码示例关键

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台