由于毕设的原因,需要实现 openCV
库中的两个底层函数,之前一直在用 python
下的 openCV
库,但是 openCV
的底层绝大部分都是用 C++
写的,故只好重新开始学习 C++
下的 openCV
库。
关于 IDE 的选择:
因为目前的需求只是搭建一个可以运行 C++
下的 openCV
库的一个 IDE
,所以像 VS
这种重型的工具不在考虑范围内,思前想后,觉得用 VSCode
最为合适。
我目前为止配过 java,python
等语言,还有各种 IDE
的插件、环境,发现这次是有史以来最难的一次,我大概花了3 天的时间,看过不下 30 篇博客,终于弄好了!!!
这篇博客会记录我搭建的必要过程,和解决问题的一些思路。
希望对大家会有所帮助~
Visual Studio Code
- 1.32
openCV
- 3.4.5
MinGw
- 5.3.0
cmake
- 3.9.0 (提取码 85uw
)
安装 C/C++ 插件(C++ Intellisense 可选)
将 opencv-3.4.5-vc14_vc15.exe
解压到 除C盘外的其他盘内(若是C盘,cmake
时很可能报错)
在 opencv\build\x64
路径下新建一个 文件夹(可自起,这里是 MinGW
)
Version
选择 5.3.0
Architecture
32位cpu 选择 i686,64位cpu 选择 x86_64Threads
如果使用 posix api 选择 posix,如果使用 win32 api 选择win32Exception
有三种,根据机器情况进行选择
如果你是 win10下的64位系统 建议选择 与图像上一致的选项。
配置环境变量 path
:
新增 C:\Program Files\mingw-w64\x86_64-5.3.0-posix-seh-rt_v4-rev0\mingw64\bin
检查是否配置成功:
win键 + R
输入 cmd
打开 dos
框
若出现上诉画面,则配置成功
配置环境变量 path
:
新增 C:\Program Files (x86)\cmake-3.9.0-rc3-win64-x64\bin
运行 cmake-3.9.0-rc3-win64-x64\bin\cmake-gui.exe
如上图所示:
where to build the binaries:
选择
点击 configure
按钮,按照下图所示进行选择
选择 MinGW 中的 C 和 C++ 编译的exe程序
我的路径: C:\Program Files\mingw-w64\x86_64-5.3.0-posix-seh-rt_v4-rev0\mingw64\bin
设置完毕点击 Finish,耐心等待进度条读完,直到输出窗口看到 Configuring done。再次点击 Configure 等待进度条读完。之后点击Generate 等待进度条读完,出现 Generating done。
这时,可以看到 opencv\build\x64\MinGW
的文件夹下新增了好多东西。
在dos框(windows power shell 也可以)里,利用 cd 命令 切换到 D:\opencv\build\x64\MinGW
,输入 minGW32-make
命令,这个时候大概花费 40 分钟左右的时间来编译,编译完成之后,输入 minGW32-make install
来完成装载。
最后,配置环境变量 path
:
新增 D:\opencv\build\x64\MinGW\bin
注意:
1、使用 cmake 时要求安装 python3
(版本没有限制,比2高就行),并且python 必须配好了环境变量。
2、输入 minGW32-make
命令后,编译过程可能会失败,我之前有一次卡在了6%
,有一次卡在了25%
,如果发生这种错误,建议将你的所有软件的版本和我保持一致再重复以上过程,因为若是编译卡住,很可能是各个软件的版本不兼容导致,报的错误,百度下来的资料很少,很难解决。
3、如果每一步都是和以上步骤保持一致,还会出错,建议重启电脑(可能是某些环境变量没有立即生效)
新建一个专门写 c/c++ 的目录
在vsCode中打开该目录
新建 testOpenCv.cpp
,copy如下代码
#include
#include
using namespace cv;
int main()
{
Mat img=imread("C:\\Users\\axin\\Desktop\\sad.jpg");
cv::imshow("image",img);
cv::waitKey();
return 0;
}
运行下,应该会报错并提示你生成 launch.json
文件,copy下面代码复制到 launch.json
中,将 "miDebuggerPath"
改成自己的。
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/${fileBasenameNoExtension}.o",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"miDebuggerPath": "C:/Program Files/mingw-w64/x86_64-5.3.0-posix-seh-rt_v4-rev0/mingw64/bin/gdb.exe",
"preLaunchTask": "g++",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
},
]
}
在.vscode
文件夹(launch.json
的父目录)下,新建 c_cpp_properties.json
,copy 如下代码,修改includePath
的后三个路径为自己的,compilerPath
同理。
{
"configurations": [
{
"name": "win",
"includePath": [
"${workspaceFolder}/**",
"D:\\opencv\\build\\include",
"D:\\opencv\\build\\include\\opencv2",
"D:\\opencv\\build\\include\\opencv"
],
"defines": [],
"compilerPath": "C:/Program Files/mingw-w64/x86_64-5.3.0-posix-seh-rt_v4-rev0/mingw64/bin/gcc.exe",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "clang-x64"
}
],
"version": 4
}
在.vscode
文件夹(launch.json
的父目录)下,新建 tasks.json
,copy以下代码,修改 “-I” 和 “-L” 的路径。
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"command": "g++",
"args": [
"-g",
"-std=c++11",
"${file}",
"-o",
"${fileBasenameNoExtension}.o",
"-I", "D:\\opencv\\build\\include",
"-I", "D:\\opencv\\build\\include\\opencv2",
"-I", "D:\\opencv\\build\\include\\opencv",
"-L", "D:\\opencv\\build\\x64\\MinGW\\lib",
"-l", "opencv_core345",
"-l", "opencv_imgproc345",
"-l", "opencv_imgcodecs345",
"-l", "opencv_video345",
"-l", "opencv_ml345",
"-l", "opencv_highgui345",
"-l", "opencv_objdetect345",
"-l", "opencv_flann345",
"-l", "opencv_imgcodecs345",
"-l", "opencv_photo345",
"-l", "opencv_videoio345"
],// 编译命令参数
"problemMatcher":{
"owner": "cpp",
"fileLocation":[
"relative",
"${workspaceFolder}"
],
"pattern":[
{
"regexp": "^([^\\\\s].*)\\\\((\\\\d+,\\\\d+)\\\\):\\\\s*(.*)$",
"file": 1,
"location": 2,
"message": 3
}
]
},
"group": {
"kind": "build",
"isDefault": true
}
}
如此,就可以按 F5
运行 testOpenCv.cpp
,展示一张你选择的图片。
cmake+opencv+mingw部分error解决
将Sublime Text 3打造成OpenCV3.2的IDE
vscode 配置OpenCVC编译环境
windows下cmake的安装教程
OpenCV在Windows环境下MinGW-W64编译方法
visual studio code(vscode) c++ 编译opencv并运行调试
说实话,在完成这个配置的过程中,看过了许多博客,论坛,帖子,十分感谢为这个问题贡献精力的程序员们,但是,我觉得通过博客,论坛,帖子的这些方式去学习某件事情,其实十分低效,一方面由于每篇博客的水平层次不齐,遇到一个和你情况完全一致的真的很难,所以需要自己结合实际情况去分析处理,不可一味的模仿照搬;另一方面,博客一般都是在写某个点,而且由于时效性等原因,可能已经过时,要想系统地去了解掌握一个东西,最好还是学习官方教程、网课、或者书籍。
以上。