当前位置: 首页 > news >正文

双目测距实战1-环境配置

我们将采用目前最稳定、最推荐的方法:使用 MSYS2 和 MinGW-w64 工具链。这种方法可以避免很多手动配置的麻烦和编译器不兼容的问题。


整体流程概览

  1. 安装 VS Code 和 C/C++ 插件 (如果你还没有)
  2. 安装 MSYS2 包管理器
  3. 通过 MSYS2 安装 MinGW-w64 C++ 编译器和相关工具 (如 g++, make, gdb)
  4. 通过 MSYS2 安装 OpenCV (这是关键,它会自动处理依赖和路径)
  5. 配置 Windows 环境变量
  6. 在 VS Code 中配置项目 (包含 c_cpp_properties.json, tasks.json, launch.json 三个核心文件)
  7. 编写、编译和运行一个简单的 OpenCV 程序

第一步:安装 VS Code 及 C/C++ 插件

如果你已经安装好了,可以跳过此步。

  1. 下载 VS Code: 前往 VS Code 官网 下载并安装。
  2. 安装 C/C++ 插件:
    • 打开 VS Code。
    • 点击左侧边栏的扩展图标 (Extensions)。
    • 搜索 “C/C++”。
    • 选择 Microsoft 提供的 “C/C++” 扩展,点击 Install

第二步:安装 MSYS2

MSYS2 是一个在 Windows 上的软件分发和构建平台,它提供了一个强大的包管理器 pacman,可以非常方便地安装开发工具和库。

  1. 下载 MSYS2: 前往 MSYS2 官网,下载 .exe 安装程序。
  2. 安装 MSYS2:
    • 运行安装程序,建议保持默认安装路径 C:\msys64
    • 安装完成后,不要立即关闭窗口,勾选 “Run MSYS2 now”。

MinGW-w64 vs. MSYS2

MinGW-w64:指的是编译器工具链本身g++.exe, gdb.exe ****等)。它就像汽车的“引擎”。

MSYS2:是一个软件分发平台和命令行环境。它提供了一个强大的包管理器 pacman 和一个 bash ****shell 环境。它负责下载、安装、管理和更新 MinGW-w64 这个“引擎”。

关系就是:MSYS2 是一个“汽车工厂”,而 MinGW-w64 是这个工厂生产和使用的“引擎”。 你通过工厂的系统(pacman)订购了 ucrt64 型号的引擎(mingw-w64-ucrt-x86_64-toolchain)。


第三步:通过 MSYS2 安装 MinGW-w64 编译器工具链

  1. 打开 MSYS2 终端: 你会看到一个类似 Linux 终端的窗口。
  2. 修改镜像源
echo 'Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch' > /etc/pacman.d/mirrorlist.msys
echo 'Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686' > /etc/pacman.d/mirrorlist.mingw32
echo 'Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/ucrt64' > /etc/pacman.d/mirrorlist.ucrt64
  1. 更新包数据库和基础包: 运行以下命令。这个过程可能需要关闭窗口并重新打开,请按照终端的提示操作。
pacman -Syu

如果提示关闭,请关闭窗口,然后从开始菜单找到 “MSYS2 UCRT64” 重新打开,再次运行 pacman -Syu 直到提示 “there is nothing to do”。

  1. 安装 MinGW-w64 工具链: 这会安装 g++ (编译器), gdb (调试器), make 等所有必要的工具。
pacman -S --needed base-devel mingw-w64-ucrt-x86_64-toolchain

当提示选择时,按 Enter 键默认安装全部。


第四步:通过 MSYS2 安装 OpenCV

这是最关键的一步。使用 pacman 安装可以确保 OpenCV 是用与你刚刚安装的 g++ 相同的编译器编译的,避免了库不兼容的问题。

  1. 搜索 OpenCV 包:
pacman -Ss opencv
  1. 安装 OpenCV 和 pkg-config: pkg-config 是一个帮助我们自动获取编译和链接标志的工具,非常有用。
pacman -S mingw-w64-ucrt-x86_64-opencv
pacman -Ql mingw-w64-ucrt-x86_64-opencv | grep opencv4.pc  #验证安装
pacman -S mingw-w64-ucrt-x86_64-qt6   #安装Qt

第五步:配置 Windows 环境变量

为了让系统和 VS Code 能找到 g++ 等命令和 OpenCV 运行时所需的 DLL 文件,需要将 MinGW-w64 的 bin 目录添加到系统的 Path 环境变量中。

  1. 在 Windows 搜索框中搜索 “环境变量”,然后点击 “编辑系统环境变量”。
  2. 在弹出的窗口中,点击 “环境变量…” 按钮。
  3. 在 “系统变量” 区域,找到并双击 Path
  4. 点击 “新建”,然后添加 MinGW-w64 的 bin 目录的路径。如果你的 MSYS2 安装在 C:\msys64,那么路径就是:
C:\msys64\ucrt64\bin
  1. 一路点击 “确定” 保存。
  2. 验证安装: 打开一个新的 cmdPowerShell 窗口(必须是新的),输入以下命令进行验证:
g++ --version
gdb --version

如果能正确显示版本号,说明环境变量配置成功。


第六步:在 VS Code 中配置项目

现在,我们来创建一个项目并配置 VS Code 来编译和运行 OpenCV 代码。

  1. 创建项目文件夹: 在你喜欢的位置创建一个文件夹,例如 D:\Projects\OpenCV_Test
  2. 用 VS Code 打开文件夹: 打开 VS Code,通过 File > Open Folder... 打开你刚刚创建的文件夹。
  3. 创建源文件: 在 VS Code 中新建一个文件,命名为 main.cpp,并粘贴以下测试代码。
#include <iostream>
#include <opencv2/opencv.hpp>int main() {// 读取图片cv::Mat image = cv::imread("test.jpg");// 检查图片是否成功加载if (image.empty()) {std::cout << "Could not open or find the image!" << std::endl;return -1;}// 创建一个窗口cv::namedWindow("Display window", cv::WINDOW_AUTOSIZE);// 在窗口中显示图片cv::imshow("Display window", image);// 等待按键,然后关闭窗口cv::waitKey(0);return 0;
}
- **注意**: 你需要准备一张名为 `test.jpg` 的图片,并把它放在项目文件夹 `OpenCV_Test` 中。
  1. 配置 VS Code 任务:
    现在,我们需要告诉 VS Code 如何编译和运行我们的代码。VS Code 通过 .vscode 文件夹下的 json 文件来管理这些配置。
    • Ctrl+Shift+P 打开命令面板,输入 C/C++: Edit Configurations (UI) 并回车。这会自动生成一个 .vscode 文件夹和 c_cpp_properties.json 文件。
    • 配置 c_cpp_properties.json (管编辑):
      将文件内容修改为如下。这个文件告诉 VS Code 在哪里寻找头文件。
{"configurations": [{"name": "Win32","includePath": ["${workspaceFolder}/**","C:/msys64/ucrt64/include/**" ],"defines": ["_DEBUG","UNICODE","_UNICODE"],"compilerPath": "C:/msys64/ucrt64/bin/g++.exe","cStandard": "c17","cppStandard": "c++17","intelliSenseMode": "windows-gcc-x64"}],"version": 4
}
    * **关键点**: `includePath` 中包含了 `C:/msys64/ucrt64/include/**`,这样 VS Code 就能找到 `opencv2` 的头文件了。
- **配置 **`tasks.json`** (用于编译)**:
{"version": "2.0.0","tasks": [{// 这是我们唯一需要的、正确的编译任务"label": "build opencv project with MinGW","type": "shell","command": "g++ -g \"${file}\" -o \"${fileDirname}/${fileBasenameNoExtension}.exe\" $(pkg-config --cflags --libs opencv4 Qt6Core )","options": {"env": {"PKG_CONFIG_PATH": "C:/msys64/ucrt64/lib/pkgconfig","PATH": "C:/msys64/ucrt64/bin;C:/msys64/usr/bin;${env:PATH}"},"shell": {"executable": "C:/msys64/usr/bin/bash.exe","args": ["-c"]}},"problemMatcher": ["$gcc"],// ▼▼▼ 把 isDefault: true 加到这里 ▼▼▼"group": {"kind": "build","isDefault": true}}// 那个错误的、自动生成的任务已经被我们删除了]
}
    * 按 `Ctrl+Shift+P`,输入 `Tasks: Configure Default Build Task` 并回车。* 选择 `C/C++: g++.exe build active file`。这会生成一个 `tasks.json` 文件。* 用下面的内容**完全替换** `tasks.json` 文件。* **关键点**: `$(pkg-config --cflags --libs opencv4)` 这部分是精髓!它会自动执行 `pkg-config` 命令,生成所有必需的 `-I` (包含路径), `-L` (库路径) 和 `-l` (链接库) 参数。这避免了手动去写一长串 ` -lopencv_core455 -lopencv_highgui455 ...`,既易错又麻烦。
- **配置 **`launch.json`** (用于运行和调试)**:
{"version": "0.2.0","configurations": [{"name": "Run OpenCV with GDB","type": "cppdbg","request": "launch","program": "${fileDirname}/${fileBasenameNoExtension}.exe","args": [],"stopAtEntry": false,"cwd": "${workspaceFolder}","environment": [{"name": "Path","value": "C:/msys64/ucrt64/bin;${env:Path}"}],"externalConsole": false,"MIMode": "gdb","miDebuggerPath": "C:/msys64/ucrt64/bin/gdb.exe","setupCommands": [{"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true}],"preLaunchTask": "build opencv project with MinGW"}]
}
    * 点击 VS Code 左侧的 "Run and Debug" 图标。* 点击 "create a launch.json file",然后选择 `C++ (GDB/LLDB)`。* 选择 `g++.exe build and debug active file`。* 用下面的内容**完全替换** `launch.json` 文件。* **关键点**: `program` 指向我们编译生成的可执行文件。`miDebuggerPath` 指向 GDB 调试器。`preLaunchTask` 确保在每次调试前都会先运行我们在 `tasks.json` 中定义的构建任务。

第七步:编译和运行

现在,所有配置都已完成!

  1. 编译:
    • 确保你的 main.cpp 文件是当前打开并激活的。
    • 按下 Ctrl+Shift+B,这会触发你在 tasks.json 中定义的默认构建任务。
    • VS Code 的终端会显示编译过程。如果没有错误,你会在项目文件夹下看到一个 main.exe 文件。
  2. 运行和调试:
    • 按下 F5 键或者左边Debug按钮
    • VS Code 会先执行编译任务,然后启动调试器运行 main.exe
    • 如果一切顺利,你会看到一个标题为 “Display window” 的窗口弹出,并显示你的 test.jpg 图片!

常见问题排查 (Troubleshooting)

  1. 错误: “undefined reference to cv::imread(std::string const&, int)
    • 原因: 这是链接错误,意味着编译器找到了头文件但找不到库文件。
    • 解决:
      • 确保 tasks.json 中的 $(pkg-config --cflags --libs opencv4) 部分正确无误。
      • 打开一个 MSYS2 UCRT64 终端,手动运行 pkg-config --cflags --libs opencv4,看看是否能输出一长串 -I... -L... -l... 参数。如果不能,说明 pkg-config 或 OpenCV 安装有问题。
  2. 错误: “opencv2/opencv.hpp: No such file or directory”
    • 原因: 编译器找不到头文件。
    • 解决:
      • 检查 c_cpp_properties.json 中的 "includePath" 是否正确指向了 C:/msys64/ucrt64/include/**
      • 检查 tasks.json,确保 pkg-config 命令正常工作。
  3. 程序启动后闪退,或者提示找不到 libopencv_core-4.dll 之类的文件
    • 原因: 运行时找不到 OpenCV 的动态链接库 (DLL)。
    • 解决: 这是环境变量 Path 没有配置正确。确保 C:\msys64\ucrt64\bin 已经添加到了系统 Path 中,并且你已经重启了 VS Code 或电脑。

恭喜你!现在你已经拥有一个功能完备的、基于 VS Code 和 MinGW-w64 的 OpenCV C++ 开发环境了。

http://www.dtcms.com/a/464765.html

相关文章:

  • 2025人工智能在无人机数据处理中的应用
  • 阿里开源Qwen3-Omni-30B-A3B三剑客——Instruct、Thinking 和 Captioner
  • 长春建站程序湖南网络科技有限公司
  • xtuoj Can you raed it croretcly?
  • 异构动作空间
  • 【Nginx开荒攻略】Nginx虚拟主机配置:从域名、端口到IP的完整指南
  • 小杰深度学习(nine)——CUDA与CuDNN安装
  • 鸿蒙NEXT USB Host模式开发完全指南
  • MinerU2.5 windows 本地部署
  • UIkit中使用新版UICollectionViewCompositionalLayout进行复杂布局(二)
  • 网站建设的技术问题苏州吴江建设局招标网站
  • 河南省村镇建设处网站网站配色与布局 教材
  • Prometheus运维之路(ES监控接入)
  • OpenAMP专题(一):一文了解OpenAMP全貌
  • C++ 中 rfind 方法详解
  • SpringBoot 教程(十四) SpringBoot之集成 Redis(优化版)
  • 【Linux】线程同步与互斥(上)
  • 图观 模型编辑器
  • Win11 输入延迟与鼠标卡顿:系统化排查与优化指南
  • 【开题答辩全过程】以 爱运动健身小程序的设计与实现为例,包含答辩的问题和答案
  • Linux 内核IIO sensor驱动
  • 《Linux系统编程之入门基础》【Linux的前世今生】
  • 活动汪活动策划网站龙岗建设网站
  • Apache IoTDB 架构特性与 Prometheus+Grafana 监控体系部署实践
  • LLM时代基于unstructured解析非结构化pdf
  • uniapp tab切换及tab锚点效果(wx小程序及H5端)
  • Hadoop面试题及详细答案 110题 (71-85)-- 集群部署与运维
  • 5-1〔OSCP ◈ 研记〕❘ SQL注入攻击▸SQL注入理论基础
  • 南充市企业网站建设wordpress极客主题
  • 企业做小红书关键词搜索排名推广时,怎么找到小红书上有一定搜索量但竞争度低的蓝海词?