一、前言
其实应该是引用一文解决VS Code下C++版OpenCV配置运行,有点标题党了hhhhh。 博主由于课程要求,需要在c++环境下配置opencv,同时由于电脑磁盘空间严重不足,安装不了visual studio,只能使用vscode配置;因此花了将近一整天时间才把opencv配好,踩了不少坑。故把一些细节问题以博客的形式整理出来,如果以后自己又要装这东西,正好用来参考。
博主主要配置流程是按照该博客进行的
一文解决VS Code安装、C++环境配置、OpenCV配置_opencv安装教程visual code-CSDN博客
这篇文章的博主写的非常用心,但是在很多小细节方面没有提到,导致多次安装都没有成功
故现在我把在该链接中没有提到的细节操作全部放到这篇博客中,顾大家参考。如有问题请在评论区指出。
二、操作前准备
首先通读一遍该博客(因为本文只是做补充说明)博客链接(后面统称该博客为参考博客)
请注意,如果你想一次性装配成功,请从他的百度网盘至少下载MinGW,CMake,OpenCV,放在英文路径文件夹下。
我之前用的是自己的MinGW,CMake来进行配置,但是由于版本问题或者其他奇怪的原因,一直无法成功编译opencv。所以我从头开始,用他提供的软件进行配置,最后才弄成功了。
三、MinGW安装
这里按照博客配置,需要注意,在配置环境变量过程中要确保我们安装的MinGW路径如D:\mingw64\bin 最好要上移到Path的顶部。
相信很多人在之前的项目中配置了很多MinGW,比如Cubemx,其他C语言项目中。建议将我们刚刚配置的MinGW路径放到最顶端,可以避免潜在的冲突问题(比如我之前遇到过编译时发生莫名其妙的段错误)。
四、OpenCV安装
这部分还是根据参考博客来配置,直到执行到需要手动下载文件的时候(如下图),这里就需要注意了
博客中说需要在CMakeDownloadLog.txt中检查哪些文件丢失。但是实际情况是你在科学上网的前提下,只会丢失这三个文件
两个dll文件你直接按照链接下载好,然后依据.cache/ffmpeg/路径下这两个dll文件的名字对其进行重命名(这个很重要),然后将其复制到上图所示的文件夹下(我路径下有两个opencv,实际上是因为我在opencv文件夹下解压缩opencv.exe导致的,具体路径要看你opencv放在那里的)
对于Cmake文件,他很特别,你点开链接之后会发现是这样的
参考博客中没有讲,实际上这些文字就是cmake文件中的内容。
具体将其下载下来放到cache文件的方法,请参考这篇简短的博客,非常良心hhhcmake编译Opencv出现ffmpeg_cmake手动下载后也无法使用问题_opencv 编译 ffmpeg 无法打开-CSDN博客
这样你应该是能够成功的编译opencv了。但是请注意,参考博客中的opencv环境变量路径可能存在问题,请按照我的方法来检查一下。
上图是参考博客中喊你配置的环境变量,你可以打开该文件夹看看这路径里面到底有什么
你会发现这个路径下有很多可执行文件以及两个dll文件
现在请你找一找这个路径 opencv\build\x64\MinGW\install\x64\mingw\bin
你会发现这里也有一个bin文件路径,dll文件也是一样的。现在请把这个文件路径放到环境变量path中,并且上移确保在前面
因为opencv的库文件(h文件)实际上是存储在\opencv\build\x64\MinGW\install\include这个目录下面的(这是我配置出来的情况,不同人可能位置不一样)。这就导致参考博客的环境变量路径和opencv的库文件不是处于同一位置(正确情况是他们两个都在install文件夹下面,可以去检查\opencv\build\x64\MinGW\include路径,你会发现这里面根本没有h文件)
这样配置好之后,才能够正确访问到opencv的库文件(我的h文件在D:\opencv\opencv\build\x64\MinGW\install\include\opencv2当中)
六、VSCode配置
首先你得根据参考博客配置VSCode运行一个简单的c++程序,相信这对大多数人是早就做过的事情了
之后对于VSCode配置,主要是修改c_cpp_properties.json launch.json tasks.json 这三个文件,这一部分可以直接按照我的来,不需要再看参考博客了,主要就是这三个配置文件的事情
在此之前我们要知道opencv的h文件路径,主要用到这两个(一定要打开这个路径看一看里面到底有没有h文件,如下图所示)
\opencv\build\x64\MinGW\install\include\opencv2
\opencv\build\x64\MinGW\install\include
同时我们要知道我们安装的opencv的版本号是多少
打开\opencv\build\x64\MinGW\install\x64\mingw\lib路径下OpenCVConfig-version.cmake文件
记下版本号,我这里是4.5.5
现在请修改 launch.json c_cpp_properties.json tasks.json
需要改的东西有点点多,要耐心一点慢慢改哦,需要改的地方我已经给出了注释
launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "OpenCV Debug",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"miDebuggerPath": "D:/opencvproject/mingw64/bin/gdb.exe",//根据自己的c++的mingw目录修改
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": false
}
],
"preLaunchTask": "opencv4.5.5"//根据上文所示,去查你的版本号,这里要写对
}
]
}
c_cpp_properties.json
{
"configurations": [
{
"name": "win",
"includePath": [
"${workspaceFolder}/**",
"D:/opencv/opencv/build/x64/MinGW/install/include",//根据自己的opencv目录修改
"D:/opencv/opencv/build/x64/MinGW/install/include/opencv2"//根据自己的opencv目录修改,确保目录下面有h文件
],
"defines": [],
"compilerPath": "D:\\opencvproject\\mingw64\\bin\\g++.exe",//根据自己c++的mingw目录修改
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "${default}"
}
],
"version": 4
}
tasks.json
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "opencv4.5.5",//这里opencv版本号查询好之后要写对
"command": "D:/opencvproject/mingw64/bin/g++.exe",//根据自己c++的mingw目录修改
"args": [
"-g",
"${file}",
"-o",
"${workspaceFolder}\\${fileBasenameNoExtension}.exe",
"-I",
"D:/opencv/opencv/build/x64/MinGW/install/include", // //根据自己的opencv目录修改
"-L",
"D:/opencv/opencv/build/x64/MinGW/install/x64/mingw/bin", //根据自己的opencv目录修改
// 这个就是之前添加的环境变量,确保其和h文件在一个目录下面(我的是install文件)
"-lopencv_world455" // //根据自己的版本修改,比如如果你的版本是4.5.3这里就写-lopencv_world453
//具体填写啥可以查看上面所写的bin文件路径
],
"options": {
"cwd": "D:/opencvproject/mingw64/bin"//根据自己的c++ mingw目录修改
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "Using OpenCV 4.5.5"//版本号要写对
},
{
"type": "cppbuild",
"label": "C/C++: g++.exe 生成活动文件",
"command": "D:/opencvproject/mingw64/bin/g++.exe",//根据自己的mingw目录修改
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": false
},
"detail": "调试器生成的任务。"
}
]
}
最后对示例代码进行测试。以下是我的示例代码
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(void)
{
cout<<"halo"<<endl;
cv::Mat img = cv::imread("1.jpg");
cv::imshow("img", img);
cv::waitKey(0);
return 0;
}
点击小三角运行C++,顶部调试配置选择第二个 OpenCV Debug
运行成功
以上就是对参考博客的补充,如果还有什么问题或者好的解决方法,请在评论区留言😘