1. 软件准备
-
MinGw:x86_64-posix-seh
-
OpenCv:opencv-4.5.2-vc14_vc15.exe
2. 配置环境变量
将上述下载的MinGw、CMake、OpenCv解压到指定文件夹内,本机测试都放在D:\IDE
文件夹内,文件路径如下:
MinGw:D:\IDE\MinGw
CMake:D:\IDE\cmake
OpenCv:D:\IDE\opencv452\opencv
在系统环境变量path
中添加MinGw、CMake:
- MinGw:
D:\IDE\MinGw\bin
; - CMake:
D:\IDE\cmake\bin
;
检查MinGw、CMake环境是否OK。
打开cmd命令窗口,输入gcc -v
判断MinGw环境,输入cmake -version
判断CMake环境。显示如下表示环境配置成功。
3. 使用CMake编译Opencv
- 在
CMake/bin
文件夹下找到cmake-gui.exe
,双击打开。
- 设置第一个路径(
Where is the source code
)是opencv的源码路径,第二个路径(Where to build the binaries
)是生成的文件的路径(手动创建ming文件夹)。
- 点击
Configure
,然后选择使用MinGw MakeFiles
作为编译器,并选择Specify native compliers
,点击next
继续,
4. Compliers
C选择mingw/bin
文件夹下的gcc.exe
,C++选择mingw/bin
文件夹下的g++.exe
,然后点击finish
继续。
5. 等完成后可能会有红色的框表示失败了,这时候看一下CMakeDownloadLog.txt
文件,应该是有几个文件没有下载下来,可以手动下载,然后把它们放到指定文件夹内并重命名。大概就是这几个文件需要手动下载:opencv_videoio_ffmpeg.dll
、opencv_videoio_ffmpeg_64.dll
、ade-0.1.1f.zip
、ffmpeg_version.cmake
。
下载失败解决方案可参考:CMake编译OpenCV4.0时opencv_ffmpeg.dll等下载失败的解决思路总结。
国内访问受限,GitHub Proxy可以下载需要的文件。
- 下载完成后再重新点击
Configure
,等待完成即可。如果完成后仍然还有红色框出现,不要着急,再重新点击Configure
即可。 - 执行完后,把
python
相关的都取消勾选,
WITH_IPP
、WITH_MSMF
、ENABLE_PRECOMPILED_HEADERS
取消勾选;
BUILD_opencv_world
、WITH_OPENGL
、BUILD_EXAMPLES
选择勾选,
CPU_DISPATCH
选空。 - 上述操作完成后点击
Generate
,直到操作完成。
4. make
重新打开cmd窗口,进入刚刚生成的mingw
文件夹,执行命令:minGW32-make -j 4
。
没有出错,继续执行命令:minGW32-make install
。
然后添加环境变量:
5. VSCode配置并测试
- 新建一个文件夹,命名为
Hello-opencv
- 使用VSCode打开该文件夹;
- 在该文件夹下新建一个文件,命名为
test.cpp
; - 编写如下代码,记得该文件夹下放一个图片;
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
std::string filename = "1.jpg";
cv::Mat srcimg = cv::imread(filename.data());
if (!srcimg.empty())
{
cv::namedWindow("test", cv::WINDOW_NORMAL);
cv::imshow("test", srcimg);
cv::waitKey(0);
}
else
{
printf("load image fail!\n");
getc(stdin);
}
return 0;
}
- 点击
调试 C/C++文件
,选择带g++.exe
,会出现提示***存在错误
,点击中止
即可;
- 在
Hello-opencv
文件夹下会手动创建.vscode
文件夹,.vscode
文件夹下手动创建三个文件:c_cpp_properties.json
、launch.json
、tasks.json
,然后按照如下编辑这些json文件。这些字段的具体含义可参考:VSCode Variables Reference。
这三个文件也可以自动生成,这里只展示手动创建的过程。
路径要根据自己电脑设置的路径填写。
c_cpp_properties.json
{
"configurations": [
{
"name": "win",
"includePath": [
"${workspaceFolder}/**",
"D:\\IDE\\opencv452\\opencv\\build\\x64\\mingw\\install\\include",
"D:\\IDE\\opencv452\\opencv\\build\\x64\\mingw\\install\\include\\opencv2"
],
"defines": [],
"compilerPath": "D:\\IDE\\MinGw\\bin\\g++.exe",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "${default}"
}
],
"version": 4
}
tasks.json
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "opencv4.5.2",
"command": "D:\\IDE\\MinGw\\bin\\g++.exe",
"args": [
"-g",
"${file}",
"-o",
"${workspaceFolder}\\RBin\\${fileBasenameNoExtension}.exe",
// RBin是自定义的文件夹名,会把生成的EXE放在该文件夹下,要手动创建RBin文件夹
// 下面的opencv路径根据自己的路径修改
"D:\\IDE\\opencv452\\opencv\\build\\x64\\mingw\\bin\\libopencv_world452.dll",
"-I",
"D:\\IDE\\opencv452\\opencv\\build\\x64\\mingw\\install\\include",
"-I",
"D:\\IDE\\opencv452\\opencv\\build\\x64\\mingw\\install\\include\\opencv2",
],
"options": {
"cwd": "D:\\IDE\\MinGw\\bin"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
launch.json
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "opencv debuge",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}\\RBin\\${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false, // true表示运行到main()函数的第一行,可以调试;false表示直接运行,不会再main()函数的第一行停止,除非设置了断点
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,//是否调用外部cmd
"MIMode": "gdb",
"miDebuggerPath": "D:\\IDE\\MinGw\\bin\\gdb.exe",//自己进行设置
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": false
}
],
"preLaunchTask": "opencv4.5.2",
"console": "integratedTerminal",
"justMyCode": true
}
],
}
- 转到
test.cpp
编辑界面,然后按F5
,如果当前路径下(Hello-open
)没有图片,则会提示load image fail!
;如果路径下有图片,会显示图片。
这两种情况都表示配置已经完成,以后如果在其它文件夹下开发,可以直接把.vscode
文件夹拷过去。
6. 注意事项
如下是本机测试时出现的问题。
- cmake添加了环境变量但是cmd窗口中输入命令提示
不是内部或外部命令
。
添加环境变量后需要重新打开cmd; - 一定要记得CMake编译时,
Configure
完成后一定要generate
!!! - 选择config的编译器时一定要选对。这个我第一次配置的时候选错了,后面执行
minGW32-make -j 4
命令时总是提示Makefile:32: *** missing separator. Stop.
,找了好多解决方案都不行,最后重新来一遍才发现。 - python等要取消勾选。
- 如果第二次configure还是有红色的,不要慌,再点击configure,直到没有红色出现。
- 第一次configure出现红色的,查看
CMakeDownloadLog.txt
,下载几个需要的文件;然后把它们放入到对应的路径下。 - 运行时要手动创建
RBin
文件夹。 - 以.vscode所在目录(测试的
Hello-opencv\
)为当前工作路径。 - 环境变量中的opencv路径一定要写对。
- 调用其它文件的函数时,要把头文件和源文件都包含进去。这个是后面写其它代码的时候一个文件要调用另一个文件内的函数,需要把那个函数声明和定义的文件都包含在内。
如下:
b.h
void b_b();
b.cpp
void b_b()
{
// 函数实现
}
a.cpp
// a.cpp中要包含函数b_b()的声明和定义的文件
#include "b.h"
#include "b.cpp"
int main()
{
b_b(); // 在b.h中声明的函数
return 0;
}