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

从0到机器视觉工程师(六):配置OpenCV和Qt环境

CMake配置OpenCV

CMakeLists.txt文件的编写

cmake_minimum_required(VERSION 3.20)
project(test_opencv LANGUAGES CXX)
#寻找Opencv库
FIND_PACKAGE(OpenCV REQUIRED)
include_directories(test_opencv ${OpenCV_INCLUDE_DIRS})
add_executable(test_opencv main.cpp)
TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${OpenCV_LIBS})

可能出现的错误

错误原因分析

CMake Error at CMakeLists.txt:4 (FIND_PACKAGE):
By not providing "FindOpenCV.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "OpenCV", but
CMake did not find one.

Could not find a package configuration file provided by "OpenCV" with any
of the following names:

OpenCVConfig.cmake
opencv-config.cmake

Add the installation prefix of "OpenCV" to CMAKE_PREFIX_PATH or set
"OpenCV_DIR" to a directory containing one of the above files. If "OpenCV"
provides a separate development package or SDK, be sure it has been
installed.
 

Configuring incomplete, errors occurred!

这个错误信息表明 CMake 在尝试找到 OpenCV 库时遇到了问题。具体来说,CMake 无法找到 OpenCV 的配置文件 OpenCVConfig.cmakeopencv-config.cmake。这些配置文件通常包含 OpenCV 库的路径和其他相关信息,CMake 需要这些信息来正确地配置和链接 OpenCV。

解决方案

方案一

在CMakeLists.txt文件中直接设置 OpenCV_DIR 变量

cmake_minimum_required(VERSION 3.20)
project(MyProject)

set(OpenCV_DIR "/path/to/opencv/build")
find_package(OpenCV REQUIRED)

修改后的CMakeLists.txt文件

cmake_minimum_required(VERSION 3.20)
project(test_opencv LANGUAGES CXX)
set(OpenCV_DIR "D:\\opencv\\build")
#寻找OpenCv库
FIND_PACKAGE(OpenCV REQUIRED)
include_directories(test_opencv ${OpenCV_INCLUDE_DIRS})
add_executable(test_opencv main.cpp)

#链接OpenCv静态库
TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${OpenCV_LIBS})

方案二

在 Windows 系统上,在命令提示符中设置环境变量:

打开cmd输入以下内容

set OpenCV_DIR=C:\path\to\opencv\build

然后重新运行 CMake即可

CMake配置Qt+OpenCV

CMakeLists.txt文件的编写

cmake_minimum_required(VERSION 3.20)
project(test_qt LANGUAGES CXX)

#QT需要额外配置开启这三个参数
set(CMAKE_AUTOMOC ON)#元编译,如果类中使用了Q_OBJECT宏,则必须启用自动元编译
set(CMAKE_AUTORCC ON)#资源qrc
set(CMAKE_AUTOUIC ON)#qt自动处理UIC

#寻找qt库
find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED)

#不设置OpenCV_DIR会出现找不到OpenCVConfig.cmake或opencv-config.cmake的错误
set(OpenCV_DIR "D:\\opencv\\build")
#寻找OpenCv库
FIND_PACKAGE(OpenCV REQUIRED)

#添加文件树
file(
GLOB _SRCS
main.cpp
MainWindow.h
MainWindow.cpp
)

#不设置OpenCV_DIR会出现找不到OpenCVConfig.cmake或opencv-config.cmake的错误

include_directories(${PROJECT_NAME} ${OpenCV_INCLUDE_DIRS})
add_executable(${PROJECT_NAME} ${_SRCS})
target_link_libraries(${PROJECT_NAME} Qt5::Core Qt5::Gui Qt5::Widgets ${OpenCV_LIBS})

点击配置、生成、打开项目,就可以成功运行啦!!!

提醒

使用CMake成功生成项目打开后运行可能会出现运行不成功的问题,这时候很大可能是CMakeLists.txt文件编写上的错误,切记注意字母大小写,大部分问题都出在这上面。

qmake配置OpenCV

打开Qt Creator,使用qmake来构建一个项目,构建完成后打开.pro文件

添加如下代码:

#配置opencv
INCLUDEPATH += D:/opencv/build/include \
               D:/opencv/build/include/opencv2
Debug: {
LIBS += -lD:/opencv/build/x64/vc15/lib/opencv_world455d
}
Release: {
LIBS += -lD:/opencv/build/x64/vc15/lib/opencv_world455
}

代码解释:

INCLUDEPATH

  • INCLUDEPATH += D:/opencv/build/include \ D:/opencv/build/include/opencv2
    • 作用INCLUDEPATH 是一个变量,用于指定编译器在编译时搜索头文件的路径。
    • 路径
      • D:/opencv/build/include:这是 OpenCV 的主头文件目录,通常包含一些通用的头文件。
      • D:/opencv/build/include/opencv2:这是 OpenCV 的模块头文件目录,包含 OpenCV 的各个模块的头文件,如 coreimgproc 等。
    • 目的:通过将这些路径添加到 INCLUDEPATH,编译器可以在编译时找到 OpenCV 的头文件,从而避免编译错误。

Debug 配置

  • Debug: { LIBS += -lD:/opencv/build/x64/vc15/lib/opencv_world455d }
    • 作用:在调试模式下,将 OpenCV 的调试库添加到项目的链接库中。
    • LIBS:这是一个变量,用于指定链接器在链接时需要链接的库文件。
    • -l:这是链接器的选项,用于指定要链接的库文件。通常后面紧跟库文件的名称。
    • D:/opencv/build/x64/vc15/lib/opencv_world455d
      • 路径D:/opencv/build/x64/vc15/lib/ 是 OpenCV 的调试库文件所在的目录。
      • 库文件opencv_world455d 是 OpenCV 的调试库文件。d 后缀表示调试版本。
    • 目的:在调试模式下,使用调试版本的 OpenCV 库,以便进行调试和错误跟踪。

Release 配置

  • Release: { LIBS += -lD:/opencv/build/x64/vc15/lib/opencv_world455 }
    • 作用:在发布模式下,将 OpenCV 的发布库添加到项目的链接库中。
    • LIBS:与调试配置相同,用于指定链接器需要链接的库文件。
    • -l:与调试配置相同,用于指定要链接的库文件。
    • D:/opencv/build/x64/vc15/lib/opencv_world455
      • 路径:与调试配置相同,是 OpenCV 的发布库文件所在的目录。
      • 库文件opencv_world455 是 OpenCV 的发布库文件。没有 d 后缀表示发布版本。
    • 目的:在发布模式下,使用发布版本的 OpenCV 库,以便生成最终的可执行文件。

.pro文件完整代码

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++17

# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
    main.cpp \
    mainwindow.cpp

HEADERS += \
    mainwindow.h

FORMS += \
    mainwindow.ui

#配置opencv
INCLUDEPATH += D:/opencv/build/include \
               D:/opencv/build/include/opencv2
Debug: {
LIBS += -lD:/opencv/build/x64/vc15/lib/opencv_world455d
}
Release: {
LIBS += -lD:/opencv/build/x64/vc15/lib/opencv_world455
}


# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

如此一来,在Qt中OpenCV就已经配置完成啦!!!

使用时可能出现的问题

原因分析

编译器无法找到 QMainWindow 头文件。这通常是因为 Qt 的安装路径或配置不正确导致的。

解决方案

在.pro文件中加入以下代码

QMAKE_PROJECT_DEPTH = 0

这行代码设置 QMAKE_PROJECT_DEPTH = 0 是为了确保你的项目文件在构建系统中的路径解析是正确的。这通常用于避免在处理路径时产生意外的行为。

相关文章:

从0到机器视觉工程师(六):配置OpenCV和Qt环境

CMake配置OpenCV CMakeLists.txt文件的编写 cmake_minimum_required(VERSION 3.20) project(test_opencv LANGUAGES CXX) #寻找Opencv库 FIND_PACKAGE(OpenCV REQUIRED) include_directories(test_opencv ${OpenCV_INCLUDE_DIRS}) add_executable(test_opencv main.cpp) TARGE…...

计算机毕业设计Python机器学习农作物健康识别系统 人工智能 图像识别 机器学习 大数据毕业设计 算法

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...

(Arxiv-2023)LORA-FA:针对大型语言模型微调的内存高效低秩自适应

LORA-FA:针对大型语言模型微调的内存高效低秩自适应 paper是香港浸会大学发表在Arxiv 2023的工作 paper title:LORA-FA: MEMORY-EFFICIENT LOW-RANK ADAPTATION FOR LARGE LANGUAGE MODELS FINE-TUNING ABSTRACT 低秩自适应 (LoRA) 方法可以大大减少微调…...

huggingface/bert/transformer的模型默认下载路径以及自定义路径

当使用 BertTokenizer.from_pretrained(bert-base-uncased) 加载预训练的 BERT 模型时,Hugging Face 的 transformers 库会从 Hugging Face Model Hub 下载所需的模型文件和分词器文件(如果它们不在本地缓存中)。 默认情况下,这些…...

从 0 开始上手 Solana 智能合约

Solana CLI 基础知识 Solana CLI 是一个命令行界面工具,提供了一系列用于与 Solana Cluster 交互的命令。 我们将介绍一些最常见的命令,但你始终可以通过运行 solana --help 查看所有可能的 Solana CLI 命令列表。 Solana CLI 配置 Solana CLI 存储了…...

(六)CAN总线通讯

文章目录 CAN总线回环测试第一种基于板载CAN测试第一步确认板载是否支持第二步关闭 CAN 接口将 CAN 接口置于非活动状态第三步 配置 CAN 接口第一步 设置 CAN 接口比特率第二步 设置 CAN 启用回环模式第三步 启用 CAN 接口 第四步 测试CAN总线回环捕获 CAN 消息发送 CAN 消息 第…...

新一代智能工控系统网络安全合规解决方案

01.新一代智能工控系统概述 新一代智能工控系统是工业自动化的核心,它通过集成人工智能、工业大模型、物联网、5G等技术,实现生产过程的智能化管理和控制。这些系统具备实时监控、自动化优化、灵活调整等特点,能够提升生产效率、保证产品质量…...

Vivado中Tri_mode_ethernet_mac的时序约束、分析、调整——(一)时序约束的基本概念

1、基本概念 推荐阅读,Ally Zhou编写的《Vivado使用误区与进阶》系列文章,熟悉基本概念、tcl语句的使用。 《Vivado使用误区与进阶》电子书开放下载!! 2、Vivado中的语法例程 1)语法例程 约束的语句可以参考vivado…...

车载网络:现代汽车的数字心跳

在汽车领域,“智能汽车”一词毫不夸张。如今的汽车已不再是原始的机械工程,而是通过先进的车载网络无缝连接的精密数字生态系统。这些滚动计算机由复杂的电子控制单元(ECU)网络提供动力,ECU是负责管理从发动机性能到信息娱乐系统等一切事务的…...

python基础和redis

1. Map函数 2. filter函数 numbers generate_numbers() filtered_numbers filter(lambda x: x % 2 0, numbers) for _ in range(5):print(next(filtered_numbers)) # 输出: 0 2 4 6 83. filter map 和 reduce 4. picking and unpicking 5. python 没有函数的重载&#xff0…...

w~自动驾驶~合集16

我自己的原文哦~ https://blog.51cto.com/whaosoft/12765612 #SIMPL 用于自动驾驶的简单高效的多智能体运动预测基准 原标题:SIMPL: A Simple and Efficient Multi-agent Motion Prediction Baseline for Autonomous Driving 论文链接:https://ar…...

最长的指定瑕疵度的元音子串

一、题目 最长的指定瑕疵度的元音子串 定义:开头和结尾都是元音字母(aeiouAEIOU)的字符串为 元音字符串 ,其中混杂的非元音字母数量为其 瑕疵度 。比如: “a” 、 "aa"是元音字符串,其瑕疵度都为0 "aiu…...

每日算法Day15【组合、组合总和III、电话号码的字母组合】

77. 组合 算法链接: 77. 组合 - 力扣(LeetCode) 类型: 回溯 难度: 中等 回溯三步法: 1、确定参数返回值 2、确定终止条件 3、单层搜索逻辑 剪枝操作: 当path容量超过k时的数据可以不用遍历,故遍历边界条件判断: …...

C语言教程——指针进阶(2)

目录 一、函数指针数组 1.1函数指针数组写法 1.2函数指针用途 二、指向函数指针数组的指针 2.1概念 三、回调函数 3.1用法 3.2qsort排序 总结 前言 我们接着上一篇的函数指针往下学习。 一、函数指针数组 1.1函数指针数组写法 我们都知道指针数组,里面可以…...

调和级数不为整数的证明

文章目录 1. 问题引入2. 证明2.1 引理12.2 引理22.3 引理3:2.4 核心证明: 3. 参考 1. 问题引入 s ( n ) 1 1 2 1 3 ⋯ 1 n , n ∈ N ∗ , n ≥ 2 s(n) 1\frac{1}{2}\frac{1}{3}\cdots\frac{1}{n}, \quad \\n \in N^*, n \ge2 s(n)121​31​⋯n1​,…...

基于微信小程序的在线学习系统springboot+论文源码调试讲解

第4章 系统设计 一个成功设计的系统在内容上必定是丰富的,在系统外观或系统功能上必定是对用户友好的。所以为了提升系统的价值,吸引更多的访问者访问系统,以及让来访用户可以花费更多时间停留在系统上,则表明该系统设计得比较专…...

基于 Boost.Asio 和 Boost.Beast 的异步 HTTP 服务器(学习记录)

已完成功能: 支持 GET 和 POST 请求的路由与回调处理。 解析URL请求。 单例模式 管理核心业务逻辑。 异步 I/O 技术和 定时器 控制超时。 通过回调函数注册机制,可以灵活地为不同的 URL 路由注册处理函数。 1. 项目背景 1.1 项目简介 本项目是一个基于…...

有机物谱图信息的速查技巧有哪些?

谱图信息是化学家解读分子世界的“语言”,它们在化学研究的各个领域都发挥着不可或缺的作用。它们是理解和确定分子结构的关键,对化学家来说极为重要,每一种谱学技术都提供了不同的视角来观察分子,从而揭示其独特的化学和物理特性…...

Eureka缓存机制

一、Eureka的CAP特性 Eureka是一个AP系统,它优先保证可用性(A)和分区容错性(P),而不保证强一致性(C)。这种设计使得Eureka在分布式系统中能够应对各种故障和分区情况,保…...

【LC】78. 子集

题目描述: 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例 1: 输入:nums [1,2,3] 输出&#xff1…...

协同过滤算法私人诊所系统|Java|SpringBoot|VUE|

【技术栈】 1⃣️:架构: B/S、MVC 2⃣️:系统环境:Windowsh/Mac 3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7 4⃣️:技术栈:Java、Mysql、SpringBoot、Mybatis-Plus、VUE、jquery,html 5⃣️…...

Docker部署Naocs-- 超细教程

Docker 拉取镜像 docker pull nacos/nacos-server:v2.2.0 挂载目录 如果不是root账号 前面加sudo 或者 切换root账号 su root(命令) mkdir -p /mydata/nacos/logs/ #新建logs目录 mkdir -p /mydata/nacos/conf/ #新建conf目录 启动容器…...

[java基础-集合篇]优先队列PriorityQueue结构与源码解析

优先队列PriorityQueue 优先级队列表示为平衡二进制堆: queue[n] 的两个子级是 queue[2*n1] 和 queue[2*(n1)]。 注:左子节点index2*parentIndex1,右子节点index2*parentIndex2,源码中计算parent位置时就是这样反过来计算的 优…...

12. C语言 数组与指针(深入理解)

本章目录: 前言1. 什么是数组?2. 数组的声明与初始化声明数组初始化数组 3. 访问数组元素遍历数组 4. 获取数组长度使用 sizeof 获取长度使用宏定义简化 5. 数组与指针数组名与指针的区别使用指针操作数组 6. 多维数组遍历多维数组 7. 数组作为函数参数8. 高级技巧与…...

Postman接口测试基本操作

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 Postman-获取验证码 需求:使用Postman访问验证码接口,并查看响应结果。 地址:http://kdtx-test.itheima.net/api/captchaIm…...

MySQL--2.1MySQL的六种日志文件

大家好,我们来说一下MySQL的6中日志文件。 1.查询日志 查询日志主要记录mysql的select查询的,改配置是默认关闭的。不推荐开启,因为会导致大量查询日志文件储存占用你的空间。 举例查询一下 select * from class; 开启查询日志的命…...

spring task使用

Spring Task 简介 Spring Task 是 Spring 框架原生自带的任务调度框架,它犹如一把瑞士军刀,为开发者提供了丰富多样的功能,助力轻松创建和管理定时任务。相较于其他一些第三方任务调度框架,Spring Task 最大的优势在于其与 Sprin…...

【FPGA】时序约束与分析

设计约束 设计约束所处环节: 约束输入 分析实现结果 设计优化 设计约束分类: 物理约束:I/O接口约束(例如引脚分配、电平标准设定等物理属性的约束)、布局约束、布线约束以及配置约束 时序约束:设计FP…...

LLM的MoE由什么构成:门控网络,专家网络

LLM的MoE由什么构成:门控网络,专家网络 目录 LLM的MoE由什么构成:门控网络,专家网络专家网络门控网络MoE在联邦学习中的使用及原理专家网络 定义与特点:是一组独立的模型,每个模型都负责处理某个特定的子任务或学习输入空间的特定部分。这些专家可以是简单的线性回归模型…...

HTML-多媒体标签

除了图像&#xff0c;网页还可以放置视频和音频。 1.<video> <video>标签是一个块级元素&#xff0c;用于放置视频。如果浏览器支持加载的视频格式&#xff0c;就会显示一个播放器&#xff0c;否则显示<video>内部的子元素。 <video src"example.…...

wordpress搭建门户/百度图片搜索网页版

登陆网页的简单功能的实现输入用户名和密码与数据库当中的用户名和密码匹配上&#xff0c;则登陆成功。首先我们要先配置好web制作所需要的软件&#xff0c;在mysql数据库当中建立表&#xff0c;建立用户名和密码在java ee上编写连接mysql数据库的代码String num request.getP…...

追波设计网站官网/如何在互联网上做推广

安装apache 1、wget http://archive.apache.org/dist/httpd/httpd-2.2.13.tar.gz 2、在安装目录 先让大家看看实际效果&#xff0c;请看下图10点中的流量&#xff0c;开启deflate压缩后后&#xff0c;今天的10点&#xff0c;带宽是3MB&#xff0c;没有开启deflate压缩的昨天上午…...

网站制作什么语言最好/二级域名网站查询入口

Error:(3, 47) java: 无法访问org.springframework.web.bind.annotation.RequestMapping的解决方法原因是jdk1.8与springboot3.0.1版本不匹配&#xff0c;把对应的springboot版本降版本即可。我自己的version显示的是3.0.1&#xff0c;改成2.7.7在项目中点击import changes即可…...

地方旅游网站怎么做/国内免费b2b网站大全

方式0应用 通过设置TMOD寄存器中的M1M0位00选择定时器方式0&#xff0c;方式0的计数位数是13位&#xff0c;对T0来说&#xff0c;TL0寄存器的低5位&#xff08;高3位未用&#xff09;和TH0寄存器的8位组成。TL0的低5位溢出时向TH0进位&#xff0c;TH0溢出时&#xff0c;置位TCO…...

突然宣布杭州疫情严重/seo权重查询

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼今天遇到的字符串处理的问题&#xff0c;记录一下方便使用str1 input(请输入一个字符&#xff1a;)#初始化字符、数字、空格、特殊字符的计数lowercase 0uppercase 0number 0space 0other 0for strs in str1:#如果在字符串中…...

有什么做网站的国企/临沂百度公司地址

谈到区块链&#xff0c;必然离不开“智能合约”这个词。我们在本系列的第一篇文章中提到“智能合约”&#xff08;smart contract&#xff09;是由多产的跨领域法律学者 Nick Szabo 在1995年提出来的&#xff0c;他的定义为&#xff1a;“一个智能合约是一套以数字形式定义的承…...