Releases - OpenCV 官网下载对应版本的opencv windows package,本文下载opencv4.5.5 。
提前安装好VScode MinG64和cmake-gui ,可参考
Windows 10 配置Vscode和MinGW64_奇洛abs的博客-CSDN博客 ,本文使用cmake-gui 3.26。不同版本的opencv可能会遇到编译bug,大多原因是opencv版本、cmake-gui版本、配置configure时候的勾选的问题。
安装opencv
运行opencv-4.5.5-vc14_vc15.exe 解压到指定路径,在 \build\x64\ 下创建MinGw文件夹
运行cmake-gui,配置 文件路径D:/opencv/sources 编译生成的路径D:/opencv/build/x64/MinGw
配置编译器
不同版本此处的勾选不同,如老版本需要勾选ENABLE_CXX11,此时已经search不到该选项
勾选:
WITH_OPENGL
BUILD_EXAMPLES
不勾选:
WITH_IPP
WITH_MSMF
执行configure,报红出错,多点几次Configure,直到没有红色为止。
点击generate
win+r 打开cmd,进入MinGW目录
执行如下指令,编译opencv
MinGw32-make
注意:若使用多线程 minGw32-make j4或j8有可能因为线程指定不明报错,可以多编译几次。
注意:编译出现PROTBUF错误时,在cmake-gui里将BUILD_PROTOBUF、PROTOBUF_UPDATE_FILES和WITH_PROTOBUF的VALUE勾选取消掉。
编译成功后,执行
minGW32-make install
安装opencv到build/x64/MinGw/install
安装opencv_contrib
将opencv_contrib解压到opencv 目录下,下载对应的opencv_contrib版本,地址为:
Index of /opencv/opencv_contrib/
将opencv_contrib的module文件夹写入OPENCV_EXTRA_MODULES_PATH
重新configure,generate,编译和安装。
测试opencv+vscode
用双线性插值处理图像,创建文件夹test,创建testopencv.cpp编辑一段代码:
#include<opencv2/opencv.hpp>
#include<opencv2/highgui.hpp>
int main(){
cv::Mat img = cv::imread("testopencv.png");
cv::Size dsize = cv:: Size(round(0.5 * img.cols), round(0.5 * img.rows));
resize(img, img, dsize, 0, 0, cv::INTER_LINEAR);
cv::imshow("testopencv", img);
cv::waitKey(5000);
return 0;
}
添加launch.json、task.json和c_cpp_properites.json做如下修改。
F5调试或者运行调试自动生成launch.json。生成launch.json后修改如下,其中miDebuggerPath写入正确的本地mingw64的gdb.exe路径。program为生成的exe路径和名称,一般与文件名相同。preLaunchTask需和tasks.json中label填入相同内容。
{
"version": "0.2.0",
"configurations": [
{
"name": "g++.exe - 生成调试活动文件",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"miDebuggerPath": "C:\\msys64\\mingw64\\bin\\gdb.exe",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": false
}
],
"preLaunchTask": "C/C++: g++.exe 生成调试活动文件"
}
]
}
生成并编辑Tasks.json文件有两种生成方法:
1. 在.vscode 文件夹(launch.json 的父目录)下,新建 Tasks.json文件;
2. 按Ctrl+Shift+P打开命令面板,输入>Task,选择 Configuration Task即可创建Tasks.json文件。
tasks.json如下,其中在args里写入opencv头文件路径、库文件路径和lib依赖库。
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++.exe 生成调试活动文件",
"command": "C:\\msys64\\mingw64\\bin\\g++.exe",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe",
"-I", "D:\\opencv\\build\\include",
"-L", "D:\\opencv\\build\\x64\\MinGw\\lib",
"D:\\opencv\\build\\x64\\MinGw\\lib\\libopencv_*"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "调试器生成的任务。"
}
],
"version": "2.0.0"
}
生成并编辑c_cpp_properties.json文件有两种生成方法:
1. 在.vscode 文件夹(launch.json 的父目录)下,新建 c_cpp_properties.json文件;
2. 按Ctrl+Shift+P打开命令面板,输入>c/c++ Edit,选择Edit Configuration(JSON)即可创建c_cpp_properties.json文件。
c_cpp_properites.json中按照需要填写配置,如这里填写cStandard为c17,cppStandard为gn++17,在头文件加入opencv头文件和正确的gcc路径。
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**",
"D:\\opencv\\build\\include"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"compilerPath": "C:\\msys64\\mingw64\\bin\\gcc.exe",
"cStandard": "c17",
"cppStandard": "gnu++17",
"intelliSenseMode": "windows-gcc-x64"
}
],
"version": 4
}
最后得到结果: