从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] 输出࿱…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?
Pod IP 的本质与特性 Pod IP 的定位 纯端点地址:Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址(如 10.244.1.2)无特殊名称:在 Kubernetes 中,它通常被称为 “Pod IP” 或 “容器 IP”生命周期:与 Pod …...
针对药品仓库的效期管理问题,如何利用WMS系统“破局”
案例: 某医药分销企业,主要经营各类药品的批发与零售。由于药品的特殊性,效期管理至关重要,但该企业一直面临效期问题的困扰。在未使用WMS系统之前,其药品入库、存储、出库等环节的效期管理主要依赖人工记录与检查。库…...
GAN模式奔溃的探讨论文综述(一)
简介 简介:今天带来一篇关于GAN的,对于模式奔溃的一个探讨的一个问题,帮助大家更好的解决训练中遇到的一个难题。 论文题目:An in-depth review and analysis of mode collapse in GAN 期刊:Machine Learning 链接:...
项目进度管理软件是什么?项目进度管理软件有哪些核心功能?
无论是建筑施工、软件开发,还是市场营销活动,项目往往涉及多个团队、大量资源和严格的时间表。如果没有一个系统化的工具来跟踪和管理这些元素,项目很容易陷入混乱,导致进度延误、成本超支,甚至失败。 项目进度管理软…...
