从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.cmake 或 opencv-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 的各个模块的头文件,如core、imgproc等。
- 目的:通过将这些路径添加到
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.0SOURCES += \
main.cpp \
mainwindow.cppHEADERS += \
mainwindow.hFORMS += \
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 没有函数的重载࿰…...
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)12131⋯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] 输出࿱…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...
安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...
Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
C++_哈希表
本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说,直接开始吧! 一、基础概念 1. 哈希核心思想: 哈希函数的作用:通过此函数建立一个Key与存储位置之间的映射关系。理想目标:实现…...
WEB3全栈开发——面试专业技能点P7前端与链上集成
一、Next.js技术栈 ✅ 概念介绍 Next.js 是一个基于 React 的 服务端渲染(SSR)与静态网站生成(SSG) 框架,由 Vercel 开发。它简化了构建生产级 React 应用的过程,并内置了很多特性: ✅ 文件系…...
