【OpenCV】【MSYS2】环境安装

发布于:2025-04-19 ⋅ 阅读:(18) ⋅ 点赞:(0)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

开发环境:MSYS2
编译器:mingw64
构建工具:CMake
调试器:GDB
依赖:opencv/qt6


一、安装MSYS2

官网:https://www.msys2.org/

1.下载安装MSYS2

点击msys2-x86_64-20250221.exe,跳转下载页面
点击msys2-x86_64-20250221.exe,跳转下载页面
安装目录(例如):C:\msys64\

2.安装必要工具链

在MSYS2终端(紫色)中运行:

# 1. 更新基础包
pacman -Syu
# 2. 安装开发工具链
pacman -S --needed base-devel mingw-w64-x86_64-toolchain
# 出现提示时,直接回车确认安装所有13个组件
# 3. 安装构建工具
pacman -S mingw-w64-x86_64-cmake mingw-w64-x86_64-ninja
# 4. 安装调试工具
pacman -S mingw-w64-x86_64-gdb

toolchain-关键组件说明:
在这里插入图片描述

3.设置系统环境变量

将MSYS2安装目录下的msys64\mingw64\bin目录添加到系统环境中的Path中
例如:C:\msys64\mingw64\bin

二、安装opencv/qt6

在MSYS2终端(紫色)中运行:

# 1. 安装OpenCV
pacman -S mingw-w64-x86_64-opencv
# 2. 安装qt6
pacman -S mingw-w64-x86_64-qt6-base

说明:OpenCV 的 highgui 模块依赖 Qt6 库

三、验证安装

CMD中运行:

# 验证编译器
g++ --version
# 验证CMake
cmake --version
# 验证OpenCV安装
pkg-config --modversion opencv4

四、项目结构

my_opencv_project/
├── src/
│   └── main.cpp
├── include/
├── build/
└── CMakeLists.txt

五、CMake配置

1. CMakeLists.txt内容

cmake_minimum_required(VERSION 3.10)
project(OpenCV_Project)

# 查找OpenCV包
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})

# 添加可执行文件
add_executable(main src/main.cpp)

# 链接OpenCV库
target_link_libraries(main ${OpenCV_LIBS})

# 设置编译选项
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra")

2. main.cpp

#include <opencv2/opencv.hpp>
#include <iostream>

int main() {
    cv::Mat image = cv::imread("test.jpg");
    if(image.empty()) {
        std::cerr << "无法加载图像!" << std::endl;
        return -1;
    }
    
    cv::imshow("显示图像", image);
    cv::waitKey(0);
    return 0;
}

六、构建与运行

1. 使用MSYS2 MINGW64终端(蓝色)

# 进入项目目录
cd /path/to/my_opencv_project

# 创建构建目录
mkdir -p build && cd build

# 生成构建系统
cmake -G "Ninja" ..

# 编译项目
ninja

# 运行程序
./main.exe

2. 使用Windows命令行

:: 设置MSYS2环境路径
set PATH=C:\msys64\mingw64\bin;%PATH%

:: 后续步骤与MSYS2终端相同
mkdir build && cd build
cmake -G "Ninja" ..
ninja
main.exe

七、调试方法

1. 使用GDB调试

# 编译时添加调试信息(在CMake中设置Debug模式)
cmake -DCMAKE_BUILD_TYPE=Debug ..

# 重新编译
ninja

# 启动GDB调试
gdb ./main.exe

2. GDB常用命令

(gdb) break main          # 在main函数设置断点
(gdb) run                # 启动程序
(gdb) next               # 单步执行
(gdb) print variable     # 打印变量值
(gdb) backtrace          # 查看调用栈
(gdb) quit               # 退出GDB

八、说明

1. 关于OpenCV的安装

通过 MSYS2 的 pacman 安装 OpenCV 与使用 OpenCV 官网提供的预编译包安装区别:
在这里插入图片描述
从官网下载最新的包为opencv-4.11.0-windows.exe,为VC16编译版本,是使用 Visual Studio 2019(MSVC 16.x)工具链编译的 OpenCV 库版本。对于mingw64编译器不兼容。在 MSYS2 终端中通过 pacman 安装 OpenCV 后,不需要再从 OpenCV 官网下载安装包安装。这两种安装方式是互斥的,混用可能会导致环境冲突:符号冲突(同一函数两份实现)、内存管理不一致(MSVC 和 GCC 的 C++ ABI 不兼容)、调试信息混乱。

以下需求可能需要官方包:
a.需要专利算法(如 SIFT/SURF),MSYS2 默认不包含专利模块;
b.需要特定版本 CUDA 支持;
c.需要 Java/Python 绑定,MSYS2 需额外安装:

pacman -S mingw-w64-x86_64-opencv-python

在 MSYS2 环境中通过 pacman 安装 OpenCV 后,编译器与头文件查找机制的工作流程
当使用 #include <opencv2/opencv.hpp> 时,编译器通过以下路径自动定位:
a.系统级包含路径,MSYS2 的 OpenCV 安装到标准位置:
/mingw64/include/opencv4/opencv2/opencv.hpp
b.CMake 自动检测,find_package(OpenCV) 会优先查找 MSYS2 的安装路径

2. 关于Ninja

在这里插入图片描述

常用指令:

ninja                 # 默认使用所有CPU核心
ninja -j4            # 限制并行任务数
ninja install        # 安装到系统(需CMake中配置)
ninja clean          # 清理构建产物
ninja -t targets     # 查看构建目标
ninja -t graph | dot -Tpng > graph.png    # 依赖关系图
ninja -t commands | sort -k5 -n -r | head -10    # 编译耗时分析

使用前,需先构建系统:

mkdir build && cd build
cmake -G "Ninja" -DCMAKE_BUILD_TYPE=Release ..

3. 关于QT6

OpenCV 的 highgui 模块支持多种后端:

a.Windows 原生:Win32 API
b.跨平台:Qt、GTK
c.基础版:无依赖的简单窗口(仅基本功能)

代码改用非 Qt 后端:

// 在调用 imshow 前强制使用原生后端
cv::namedWindow("显示图像", cv::WINDOW_AUTOSIZE | cv::WINDOW_GUI_NORMAL);
cv::imshow("显示图像", image);

使用其他方式显示图像:

// 保存图像代替显示
cv::imwrite("output.jpg", image);
std::system("start output.jpg");  // 用系统默认程序打开

4. 关于MSYS2

MSYS2 在 Windows 上的 C++ 开发中,提供完整的类 Linux 开发环境。
在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到