零基础学QT、C++(五)QT编译、导入OpenCV

news/2025/2/22 5:46:08

目录

一、前言

二、准备工作

三、下载OpenCV包

四、包目录

五、版本匹配问题

六、QT导入OpenCV

七、手动编译OpenCV

1、导入项目(他会加载很久,耐心等待)

2、项目导入完成后,我们就可以开始构建

3、构建完成,就可以看看build目录

4、到目录下,输入命令,生成install文件夹

5、把生成的install文件夹,拷贝到一个好地方

一、前言

现在需要读取图片,处理图片,就需要OpenCV这个库

那么QT项目如何导入OpenCV呢?

二、准备工作

需要知道自己用的编译器是什么?(是msvc?还是minGW?)

msvc又是多少版本的呢?(2022? 2019?)

我目前的情况:

安装了QT6.8(里面集成了msvc2022,cmake)

三、下载OpenCV包

官网:Releases - OpenCV

下载不了怎么办?

俺这里有一个4.8版本的exe(其实这就是一个压缩包)

「opencv-4.8.0-windows.exe」
链接:https://pan.quark.cn/s/c6120e13debd


双击执行exe,选择解压的路径

解压完成~

四、包目录

build文件夹里面,就是官方编译好的

sources里面,就是源码(我们可以自行编译)

很多教程都有说,我们可以直接去使用【编译好的OpenCV】

也就是直接使用build文件夹里面的(他是编译好的)

但是,我们需要看看这个编译好的,是否和我们当前的环境匹配!

五、版本匹配问题

请你打开文件夹,看看这里

如果是vc16,就代表他只适合msvc 2019版本

如果是vc17,就代表他只适合msvc 2022版本

我现在是msvc 2022版本,所以没有现成的,我得自己手动编译,或者找别人(也是msvc2022)编译好的

如果你刚好是MSVC 2022,需要OpenCV4.8版本

并且懒得编译,就可以直接使用我这里编译好的:

「msvc2022-opencv480.zip」
链接:https://pan.quark.cn/s/855f3844a400

六、QT导入OpenCV

如果你想用现成编译好的,又懒得手动编译,这里就可以直接导入QT了!

这里路径是:E:\openCV\opencv\build

# 设置OpenCV_DIR,指定OpenCV的路径 (这里的路径自行修改!)
# 你可以把build文件夹放到你喜欢的地方,build文件夹也可以修改名字
set(OpenCV_DIR "E:/openCV/opencv/build")

# 查找OpenCV库
find_package(OpenCV REQUIRED)

# 包含OpenCV的头文件目录
include_directories(${OpenCV_INCLUDE_DIRS})

# 链接 OpenCV 库   qttest 为项目名(记得更替为你自己的项目名)
target_link_libraries(qttest PRIVATE ${OpenCV_LIBS})

验证是否导入成功,在main函数中,写入:

#include <opencv2/opencv.hpp>
int main() {
    // 创建一个 500x500 的红色图像(BGR格式)
    cv::Mat redImage(500, 500, CV_8UC3, cv::Scalar(0, 0, 255));
    // 显示图像
    cv::imshow("Red Image with Noise", redImage);
    cv::waitKey(0); // 按任意键关闭窗口
    return 0;
}

如果可以正常运行出一个红色窗口,那么就导入完毕啦~

七、手动编译OpenCV

1、导入项目(他会加载很久,耐心等待)

配置项目的时候,release和debug都可,看自己喜好

2、项目导入完成后,我们就可以开始构建

这里估计要等20分钟左右

3、构建完成,就可以看看build目录

这里面有10G!(一会把需要的内容拷贝到固定的地方,就把这项目给删掉~)

4、到目录下,输入命令,生成install文件夹

到目标目录下,打开cmd:

E:\openCV\opencv\sources\build\Desktop_Qt_6_8_2_MSVC2022_64bit-Debug

输入命令:

cmake -P cmake_install.cmake

5、把生成的install文件夹,拷贝到一个好地方

你会发现install文件夹里面的内容,和现成编译好的build文件夹结构是一模一样的!

所以,之后如何引入,这里就不赘述了,请看【第六点】导入OpenCV

总结

帮助在QT项目中集成OpenCV库,解决环境配置中的常见痛点。

文章从环境准备开始,指导如何下载与QT兼容的OpenCV源码包,并解析其目录结构,避免因版本不匹配导致的编译失败。

针对手动编译OpenCV这一核心环节,逐步演示如何通过CMake构建项目、生成安装文件(install目录),并迁移至稳定路径。

同时,文章重点剖析了QT与OpenCV的版本适配问题,提供兼容性检查与解决方案。

最后,通过一个“生成红色噪声图像”的实战案例,验证OpenCV的集成效果,确保开发者能快速上手图像处理功能。

 


http://www.niftyadmin.cn/n/5861676.html

相关文章

DuodooBMS源码解读之 equipment_work_order模块

Odoo 18 MrpWorkOrder 扩展模块用户使用手册 一、引言 本用户使用手册旨在帮助你了解并使用基于 Odoo 18 原生模块扩展的 MrpWorkOrder 模块。该扩展模块为制造工单管理提供了额外的功能&#xff0c;包括设备作业单关联、生产数量计算、检验合格数量统计等。通过本手册&#…

UI 自动化测试框架介绍

UI 自动化测试框架是用于模拟用户操作、验证界面功能和行为的工具。以下是一些常见的 UI 自动化测试框架,适用于不同的平台和技术栈: 1. Web UI 自动化框架 用于测试 Web 应用程序的 UI 自动化框架: Selenium: Java、Python、C#、JavaScript、Ruby 等。 : 支持多种浏览器(…

11、k8s的hpa和rancher

hpa hpa概念 hpa&#xff1a;自动对pod的数量进行扩缩容。 修改pod的数量&#xff1a; 1、手动——基于控制器——deployment statefulset(副本数) 2、自动扩缩容——基于资源限制的字段&#xff0c;达到阈值之后可以对pod的数量进行自动增加&#xff0c;小于阈值时可以自…

百度搜索,能否将DeepSeek变成“内功”?

最近&#xff0c;所有的云平台和主流APP都在努力接入DeepSeek。其中&#xff0c;搜索类APP与搜索引擎更是“战况激烈”。那么问题来了&#xff0c;接入DeepSeek已经变成了标准配置&#xff0c;到底应该如何做出差异化&#xff1f;接入DeepSeek这件事能不能实现11大于2的效果&am…

Redis复制性能优化利器:深入解析replica-lazy-flush参数

Redis复制性能优化利器&#xff1a;深入解析replica-lazy-flush参数 在Redis的主从复制场景中&#xff0c;你是否遇到过这些情况&#xff1f; 主从全量同步时从节点长时间不可用大数据量同步期间出现连接超时内存使用量在同步期间突然飙升 这些问题的解决方案可能就藏在repl…

Linux 内核网络设备驱动编程:私有协议支持

一、struct net_device的通用性与私有协议的使用 struct net_device是Linux内核中用于描述网络设备的核心数据结构,它不仅限于TCP/IP协议,还可以用于支持各种类型的网络协议,包括私有协议。其原因如下: 协议无关性:struct net_device的设计是通用的,它本身并不依赖于任何…

武汉火影数字|VR沉浸式空间制作 VR大空间打造

VR沉浸式空间制作是指通过虚拟现实技术创建一个逼真的三维环境&#xff0c;让用户能够沉浸在这个环境中&#xff0c;彷佛置身于一个全新的世界。 也许你会好奇&#xff0c;VR 沉浸式空间究竟是如何将我们带入那奇妙的虚拟世界的呢&#xff1f;这背后&#xff0c;离不开一系列关…

【CXX】3 其它Rust与C++互操作工具详解

在Rust与C的互操作中&#xff0c;除了CXX之外&#xff0c;确实存在其他工具和方法。以下是对这些工具和方法的详细分析&#xff1a; 一、使用Bindgen Bindgen是一个用于自动生成Rust绑定代码的工具&#xff0c;它可以将C/C库的符号信息转换为Rust绑定。这样&#xff0c;Rust代…