OpenCV环境配置
文章目录
一、VS2022 + OpenCV
1.下载 安装OpenCV
- 进入OpenCV的GitHub链接。
- 点击Release
- 进入下载选定Release版本,这里以最新的OpenCV 4.8.1为例
- 下载完成后等到该exe可执行文件
右键点击使用压缩工具打开,我这里使用Bandzip,将安装包内的所有内容解压在同一文件夹
这里我解压到D盘目录下,将opencv根目录重名为OpenCV_4.8.1
2.系统环境变量配置
Win11操作系统中 右键点击此电脑->显示更多选项->属性->高级系统设置->高级->环境变量->系统变量->Path
选中Path后点击编辑按钮进入编辑环境变量,点击右侧新建按钮将之前解压缩的opencv根目录OpenCV_4.8.1内的build\x64\vc16\bin目录添加至此(盘符以及跟文件目录路径由之前解压路径而定,可自行修改)。
3.项目环境配置
- 使用Visual Studio 2022创建新项目,选择Window桌面向导模板进行创建
配置新项目 这里我在D盘创建了一个名为OpenCV_Study的文件夹用于保存项目文件,这些配置信息可行修改
点击创建后如图所示:
注意这里应用程序类型一定要选择 控制台应用程序.(exe) 并且在其他选项中勾选 空项目
- 创建打开项目后将左上角的活动解决方案配置修改成 Release,活动解决方案平台修改成 x64,如图所示:
- 右键点击视图->其他窗口->属性管理器
在属性管理器中可以看到 Release | x64 右键点击后点击 属性 进入 Release 属性页
在 Release属性页 中需要配置的是 通用属性 中 VC++目录 的 包含目录 以及 库目录
点击 包含目录 右侧的下拉菜单后点击 编辑 打开包含目录后将之前解压的OpenCV_4.8.1根目录下的 build\include 和 build\include\opencv2 添加到包含目录中,如图所示:
点击 确定 按钮后保存修改包含目录配置信息
点击 库目录 右侧的下拉菜单后点击 编辑 打开库目录后将之前解压的OpenCV_4.8.1根目录下的 build\x64\vc16\lib 添加到库目录中,如图所示:
点击 确定 按钮后保存修改库目录配置信息
最终 VC++目录 配置如图所示:
最后进入 Release属性页 下的 通用属性->链接器->输入 中配置附加依赖项
找到OpenCV_4.8.1根目录下的 build\x64\vc16\lib 文件夹
将 opencv_world481.lib 文件名完整的粘贴至附加 依赖项 ,如图所示:
点击 确定 按钮后保存修改附加依赖项配置信息
最终 输入 配置如图所示:
点击应用、确定后保存所有配置,即可开始编写测试程序测试环境配置是否成功。
4.测试运行
- 右键点击 源文件->添加->新建项
这里我直接将文件命名为main.cpp - 编写测试代码
#include <opencv2/opencv.hpp>
int main()
{
cv::Mat image; // 创建一个空图像
image = cv::imread("D:\\Software\\bg.png"); // 读取输入图像
cv::namedWindow("Image"); // 定义窗口
cv::imshow("Image", image); // 显示图像
cv::waitKey(0); // 键入的正数表示等待的毫秒数,0表示永远地等待按键
return 0;
}
- 编译运行,测试通过
二、Qt + OpenCV
1.下载 解压OpenCV源码
- 进入OpenCV的GitHub链接。
- 点击Release
- 进入下载选定Release版本,这里以最新的OpenCV 4.8.1为例
- 下载后得到 opencv-4.8.1.zip 压缩文件
- 在D盘下新建 OpenCV-4.8.1 文件夹,OpenCV-4.8.1文件夹再新建两个文件夹,一个命名为 sources ,一个命名为 build ,如图所示:
然后将 opencv-4.8.1.zip 压缩文件解压至 sources 文件夹内,如图所示:
2.使用cmake-gui编译OpenCV
- 在使用cmake-gui编译OpenCV前先确保已安装Qt和Qt相关的工具链
确保将Qt安装根目录下的mingw编译器目录配置至系统环境变量中 - 打开cmake-gui编译OpenCV源码,点击 Browse Source 选择之前在D盘中创建的 OpenCV-4.8.1 文件夹内的 source 文件夹,点击 Browse Build 选择之前在D盘中创建的 OpenCV-4.8.1 文件夹内的 build 文件夹,具体首页配置如下:
然后点击左下角的 Configure
在 Specify the generator for this project 下拉菜单列表中选择 MinGW Makefiles,同时选择 Specify native compilers 复选框
点击 Next 按钮进入下一步后如图所示
将 Compilers 编译器组框内的 C编译器配置成之前配置至系统环境变量的 bin 目录下的 gcc.exe, C++编译器则选择 g++.exe,然后点击 finish 按钮开始编译。
编译完成后会发现有许多类似的报错,不用担心,这是因为特色网络受限的原因,总而言之是有办法解决的。
接下来需要进入之前创建的opencv根目录 OpenCV-4.8.1 中的 build 文件夹找到一个名为 CMakeDownloadLog.txt 的文本文件
打开 CMakeDownloadLog.txt 后可以看到有非常多的信息,不用在意,只需要找到关键信息即可,找到 opencv_videoio_ffmpeg.dll 和 opencv_videoio_ffmpeg_64.dll,拿 opencv_videoio_ffmpeg_64.dll 举例:
将后续链接 https://raw.githubusercontent.com/opencv/opencv_3rdparty/7da61f0695eabf8972a2c302bf1632a3d99fb0d5/ffmpeg/opencv_videoio_ffmpeg_64.dll 用科学上网或者下载器下载下来。
然后将这两个 dll 动态库文件复制到之前创建的opencv根目录 OpenCV-4.8.1 中的 source 文件夹下的子文件夹 3rdparty 下的 ffmpeg 文件夹,如图所示:
然后再次点击cmake-gui的 Configure 按钮,再次点击后无需理会报错。
再次配置完成后使用Search搜索修改勾配置项:
具体修改勾选项如下:
- 需要勾选的配置项:
- WITH_OPENGL
- WITH_OPENMP
- BUILD_opencv_world
- ENABLE_CXX11 (如果存在该选项)
- 需要取消勾选的配置项:
- WITH_OPENCL_D3D11_NV
- WITH_IPP
- ENABLE_PRECOMPILED_HEADERS
以上勾选配置修改完成后点击cmake-gui中的 Generate 按钮即可。提示 Generating done 即可进行后续操作
进入之前创建的opencv根目录 OpenCV-4.8.1 中的 build 文件夹,右键点击空白处选择 在终端中打开 进入 Windows PowerShell ,在执行命令前需要确保终端是否进入 build 文件夹。
然后使用mingw32-make -j 8
命令进行编译,如图所示:
接下来暂时耐心的等待编译过程…
编译完成后使用mingw32-make install
命令进行构建,如图所示:
构建完成后将之前创建的opencv根目录 OpenCV-4.8.1 中的 build 文件夹下的子文件夹 install 下的 x64 文件夹内的 mingw 文件夹中的 bin 目录的完整路径添加至系统环境变量
如图所示:
3.测试运行
-
打开 Qt Creator,点击左侧 创建项目,设置项目路径
-
这里我选择使用 qmake 进行项目构建
-
只是测试,类信息使用默认即可
-
翻译文件配置无所谓,使用默认跳过即可
-
构建套件选择MinGW 64-bit的即可,要注意不同的Qt版本对应不同版本的构建套件,之前配置系统环境变量的 mingw81_64 对应 Qt 5.15.2 版本
-
项目管理,默认配置跳过即可
-
构建项目完成后,右键点击 项目->添加库,进入 添加库 配置,选择 外部库 复选框
点击 下一步 按钮进行后续配置操作 -
在 外部库配置 中,需要对 库文件 和 包含路径 两项进行配置,点击库文件右侧的浏览按钮,选择之前创建的opencv根目录 OpenCV-4.8.1 中的 build 文件夹下的子文件夹 install 下的 x64 文件夹内的 mingw 文件夹中的 lib 目录中有个名为 libopencv_world481.dll.a 的文件。
配置 库文件 后会自动配置 包含路径,这个自动配置的包含路径是错误的,需要手动进行修改。
点击 包含路径 右侧的 浏览 按钮进行配置,选择之前创建的opencv根目录 OpenCV-4.8.1 中的 build 文件夹下的子文件夹 install 下的 include 目录即可。
最后 外部库 完整配置如图所示:
点击 下一步 按钮后需要保存项目的.pro文件 -
编写运行测试程序:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "opencv2/opencv.hpp"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
cv::Mat image = cv::imread("D:\\Software\\bg.png");
cv::imshow("Image", image);
cv::waitKey(0);
}
MainWindow::~MainWindow()
{
delete ui;
}
程序正常运行即可~~~