Win下安装OpenCV+VScode
评论 0 热度 788
准备:MinGW-w64(记得设置环境变量)、vscode(C/C++插件)、CMake、OpenCV源码
CMake与编译
打开CMake
- 指定源码目录(记为srcDir)
- 指定编译目录(记为buildDir)
- 点击
Configure
配置,注:"Specify the generator for this project"选"MinGW Makefiles" - 配置中间的列表,根据资料,勾选BUILD_opencv_world,WITH_OPENGL和BUILD_EXAMPLES,不勾选WITH_IPP、WITH_MSMF和ENABLE_PRECOMPILED_HEADERS(如果有的话),CPU_DISPATCH选空。
- 检查输出是否有误,无误点击
generate
生成。 - 进入buildDir,打开cmd,用
MinGW32-make
进行编译,可指定-j N
多线程编译 - 编译完成,
MinGW32-make install
安装 - 添加路径
buildDir/bin
到环境变量
注:编译后,buildDir\\install\\x64\\mingw\\bin
下的dll被自动转移到buildDir/bin
下,所以这里只引用了一个。opencv的头文件在buildDir\\install\\include
下,这里不添加到环境变量中。
配置VScode
打开VScode,按ctrl+shift+p
打开C/C++: Edit Configurations (JSON)
,配置c_cpp_properties.json
。此json指定includePath是给VScode看的,让其实现代码高亮。
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**",
"buildDir\\install\\include",
"buildDir\\install\\include\\opencv2",
// "buildDir\\install\\x64\\mingw\\bin"
// "buildDir\\bin"
],
"defines": [
],
"compilerPath": "C:\\mingw64\\bin\\g++.exe",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "${default}"
}
],
"version": 4
}
配置launch.jspn
。注意下面的preLaunchTask
要与后面tasks.json
中的label
一致,才会正确启动;program
的地址要与后面tasks.json
中的args --> -o
中的地址一致,因为这一项指定了程序生成的地址,若地址不一样,会找不到。此json主要是指定了程序生成的地址和preLaunchTask,也是给VScode看的。
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [{
"name": "opencv dbg",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/dbg/${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": false
},
{
"description": "将反汇编风格设置为 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": false
}
],
"preLaunchTask": "opencv4.5.1"
}]
}
配置tasks.json
。这里指定用的是C:\\mingw64\\bin\\g++.exe
作为编译器,args
中还指定了输出文件地址、头文件地址(-I
)、动态库文件地址(-L
)、以及动态库。此json指定的编译的必须条件(头文件、库等),是给编译器看的。
注意:若在CMake中勾选了BUILD_opencv_world
,那么其实只会生成一个动态库,不需要像这里一样引用那么多个库。并且库的表达方式比较特殊,在buildDir\\install\\x64\\mingw\\bin
中,库的文件名称是libopencv_core451.dll
之类的以lib
开头的.dll
文件,但是在指定时,需要指定为-lopencv_core451
,即去掉lib & .dll
,同时以-l
开头(无空格)。
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "opencv4.5.1",
"type": "shell",
"command": "C:\\mingw64\\bin\\g++.exe",
"args": [
"-g", // 生成和调试有关的信息
"${file}",
"-o", "${workspaceFolder}/dbg/${fileBasenameNoExtension}.exe",
"-I",
"buildDir\\install\\include",
"-I",
"buildDir\\install\\include\\opencv2",
"-L",
"buildDir\\bin", // 这个必须有 似乎编译器不会自动从环境变量中查找
"-lopencv_calib3d451",
"-lopencv_core451",
"-lopencv_dnn451",
"-lopencv_features2d451",
"-lopencv_flann451",
"-lopencv_highgui451",
"-lopencv_imgcodecs451",
"-lopencv_imgproc451",
"-lopencv_ml451",
"-lopencv_objdetect451",
"-lopencv_photo451",
"-lopencv_stitching451",
"-lopencv_video451",
"-lopencv_videoio451",
],
"options": {
"cwd": "C:\\mingw64\\bin"
}
}
]
}
如果没有为buildDir\\bin
设环境变量,那么执行时还需要把库文件复制一份到程序同级目录下,即dbg目录下(与-o
指定目录同级)。所以放到其他电脑上运行时记得复制bin下的动态链接库。
测试
创建一个cpp文件,测试一下运行即可。
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(){
Mat img = Mat::zeros(Size(100, 100), CV_8UC3);
cvtColor(img, img, COLOR_BGR2HSV_FULL);
int bH, bS, bV;
for (int i = 0; i < img.cols; i++){
bH = (float)i/img.cols*255;
bS = 255;
bV = 255;
for (int j = 0; j < img.rows; j++){
bS = (float)(img.rows - j)/img.rows*255;
img(Range(j, j+1), Range(i, i+1)) = Scalar(bH, bS, bV);
}
}
cvtColor(img, img, COLOR_HSV2BGR_FULL);
imwrite("5.jpg", img);
}