vscode+opencv环境搭建(windows mingw )

代码仓库gitee

下载opencv源码

下载地址:Releases - OpenCV

我这里选择的是OpenCV – 4.5.5

解压源代码

在上一级创建build目录

编译

打开cmake-gui.exe

填入源码路径和build路径

点击左下角Configure,选择MinGW Makefiles,点击Finish

解决报错

等待结束之后可能是一片红色,多点几次,直到下方控制台的红色数量不再增加。(我到这里只剩下4处)

CMake Warning at cmake/OpenCVGenSetupVars.cmake:54 (message):
  CONFIGURATION IS NOT SUPPORTED: validate setupvars script in install
  directory
Call Stack (most recent call first):
  CMakeLists.txt:968 (include)

这个报错需要搜索框搜索 OPENCV_GENERATE_SETUPVARS 取消勾选

CMake Warning at cmake/OpenCVDownload.cmake:193 (message):
FFMPEG: Download failed: 7;"Couldn't connect to server"

For details please refer to the download log file:

D:/study/opencv_with_contrib_test_sln/CMakeDownloadLog.txt

Call Stack (most recent call first):
3rdparty/ffmpeg/ffmpeg.cmake:20 (ocv_download)
cmake/OpenCVFindLibsVideo.cmake:200 (download_win_ffmpeg)
CMakeLists.txt:636 (include)

剩下的三处报错都有FFMPEG: Download failed:,这是因为FFMPEG无法连接到下载服务器。

解决方法是通过外网下载好需要的文件,放到所需的目录。


打开build/CMakeDownloadLog.txt找到需要下载的文件链接和需要下载的目录

#do_copy "opencv_videoio_ffmpeg.dll" "eece4ec8304188117ffc7d5dfd0fc0ae" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/4d348507d156ec797a88a887cfa7f9129a35afac/ffmpeg/opencv_videoio_ffmpeg.dll" "D:/GCC/opencv-4.5.5/build/3rdparty/ffmpeg"
#missing "D:/GCC/opencv-4.5.5/build/3rdparty/ffmpeg/opencv_videoio_ffmpeg.dll"
#check_md5 "D:/GCC/opencv-4.5.5/opencv-4.5.5/.cache/ffmpeg/eece4ec8304188117ffc7d5dfd0fc0ae-opencv_videoio_ffmpeg.dll"
#mismatch_md5 "D:/GCC/opencv-4.5.5/opencv-4.5.5/.cache/ffmpeg/eece4ec8304188117ffc7d5dfd0fc0ae-opencv_videoio_ffmpeg.dll" "d41d8cd98f00b204e9800998ecf8427e"
#delete "D:/GCC/opencv-4.5.5/opencv-4.5.5/.cache/ffmpeg/eece4ec8304188117ffc7d5dfd0fc0ae-opencv_videoio_ffmpeg.dll"
#cmake_download "D:/GCC/opencv-4.5.5/opencv-4.5.5/.cache/ffmpeg/eece4ec8304188117ffc7d5dfd0fc0ae-opencv_videoio_ffmpeg.dll" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/4d348507d156ec797a88a887cfa7f9129a35afac/ffmpeg/opencv_videoio_ffmpeg.dll"
#try 1
# timeout on name lookup is not supported
# getaddrinfo(3) failed for raw.githubusercontent.com:443
# Could not resolve host: raw.githubusercontent.com
# Closing connection 0
#

以第一段报错为例

最后一行显示了要下载的目录和下载地址

#cmake_download "D:/GCC/opencv-4.5.5/opencv-4.5.5/.cache/ffmpeg/eece4ec8304188117ffc7d5dfd0fc0ae-opencv_videoio_ffmpeg.dll" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/4d348507d156ec797a88a887cfa7f9129a35afac/ffmpeg/opencv_videoio_ffmpeg.dll"
# 下载地址
https://raw.githubusercontent.com/opencv/opencv_3rdparty/4d348507d156ec797a88a887cfa7f9129a35afac/ffmpeg/opencv_videoio_ffmpeg.dll
# 下载到的目录
D:/GCC/opencv-4.5.5/opencv-4.5.5/.cache/ffmpeg/

下载到本地后重命名文件

eece4ec8304188117ffc7d5dfd0fc0ae-opencv_videoio_ffmpeg.dll

格式是 文件MD5-文件名.dll


下载后的文件分别为

ffmpeg_version.cmake
opencv_videoio_ffmpeg.dll
opencv_videoio_ffmpeg_64.dll

如果也是4.5.5版本可以直接使用这个
下载后的文件

ffmpeg_version.cmake的链接打开后是一串文本

不能复制保存,需要右键—>另存为—>TXT文件。然后删除后缀.txt。


将文件复制到.cache/ffmpeg/ 目录并按格式重命名

20deefbfe023c8b8d11a52e5a6527c6a-opencv_videoio_ffmpeg_64.dll
8862c87496e2e8c375965e1277dee1c7-ffmpeg_version.cmake
eece4ec8304188117ffc7d5dfd0fc0ae-opencv_videoio_ffmpeg.dll

打开.cache/ffmpeg/ 目录时,里面可能已经有文件了,但是大小是0KB。

文件的MD5可以直接使用0KB文件的文件名,也可以复制#cmake_download "D:/GCC/opencv-4.5.5/opencv-4.5.5/.cache/ffmpeg/eece4ec8304188117ffc7d5dfd0fc0ae-opencv_videoio_ffmpeg.dll"

里面的名称,或者找其他工具计算,顺便可以校验文件是否损坏。

编译

修改完成后,回到CMake-gui,再次点击左下角Configure

没有报错,然后点击Configure右边的Generate。

完成后打开build目录,里面会有一个Makefile文件

在build目录打开cmd,执行mingw32-make.exe -j 8命令开始编译

编译完成后执行mingw32-make.exe install命令,生成库

然后到build找到install文件夹,复制出来。新建了一个文件夹,用来放install文件夹,其他文件可以删除了。

新建了一个文件夹,放install文件夹

编译后的文件


配置环境变量

回到桌面,右键此电脑—>属性。找到高级系统设置,点击环境变量

在系统环境变量的Path里面添加install目录里面的bin文件夹路径

确认保存后重启电脑

测试

打开cmd,输入opencv_version,显示opencv版本,说明环境配置成功。

准备一张图片,写个程序测试一下

#include "iostream"
#include "opencv2/opencv.hpp"

int main(int argc, char const *argv[])
{
    cv::Mat img = cv::imread("x1.png");
    if (img.empty())
    {
        std::cout << "image is empty or the path is invalid!" << std::endl;
        return 0;
    }
    cv::imshow("Origin", img);
    cv::waitKey(0);
    cv::destroyAllWindows();
    return 0;
}

编译命令

g++ ./hello_opencv.cpp -std=c++14 -I D:/GCC/opencv_4.5.5/install/include -L D:/GCC/opencv_4.5.5/install/x64/mingw/lib -lopencv_core455 -lopencv_imgcodecs455 -lopencv_imgproc455 -lopencv_calib3d455 -lopencv_dnn455 -lopencv_features2d455 -lopencv_flann455 -lopencv_gapi455 -lopencv_highgui455 -lopencv_ml455 -lopencv_objdetect455 -lopencv_photo455 -lopencv_stitching455 -lopencv_video455 -lopencv_videoio455 -o hello_opencv.exe

编译命令说明

-I D:/GCC/opencv_4.5.5/install/include 这里的路径是install目录下的头文件夹—include

-L D:/GCC/opencv_4.5.5/install/x64/mingw/lib 是install目录里面的库文件夹—bin

-lopencv_core455 这些参数后面的数字是opencv的版本,这里用的是4.5.5,

例如opencv4.5.2编译时,就要用-lopencv_core452 -lopencv_imgcodecs452

使用vscode编译

工作空间结构如下图

c_cpp_properties.json里面添加头文件路径

{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}/**",
                "D:/GCC/opencv_4.5.5/install/include"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "cStandard": "c17",
            "cppStandard": "c++17",
            "intelliSenseMode": "windows-gcc-x64",
            "compilerPath": "D:/GCC/MinGW64/bin/g++"
        }
    ],
    "version": 4
}

配置tasks

tasks和launch配置参考

"launch": {
        "version": "0.2.0",
        "configurations": [
            {
                "name": "C/C++: cpp.exe 生成和调试活动文件OvO",
                "type": "cppdbg",
                "request": "launch",
                "program": "${workspaceFolder}/bin/a.exe",
                "args": [],
                "stopAtEntry": false,
                "cwd": "${workspaceFolder}/bin",
                "environment": [],
                "externalConsole": true,
                "MIMode": "gdb",
                "miDebuggerPath": "D:/GCC/MinGW64/bin/gdb.exe",
                "setupCommands": [
                    {
                        "description": "为 gdb 启用整齐打印",
                        "text": "-enable-pretty-printing",
                        "ignoreFailures": true
                    },
                    {
                        "description": "将反汇编风格设置为 Intel",
                        "text": "-gdb-set disassembly-flavor intel",
                        "ignoreFailures": true
                    }
                ],
                "preLaunchTask": "C/C++: cpp.exe 生成活动文件"
            }
        ]
    },
    "tasks": {
        "version": "2.0.0",
        "tasks": [
            {
                "type": "cppbuild",
                "label": "C/C++: cpp.exe 生成活动文件",
                "command": "g++",
                "args": [
                    "-g",
                    "${workspaceFolder}/src/${fileBasename}",
                    "-o",
                    "${workspaceFolder}/bin/a",
                    "-mwindows",
                    "-I",
                    "${workspaceFolder}/include",
                    "-I",
                    "D:/GCC/opencv_4.5.5/install/include",
                    "-L",
                    "D:/GCC/opencv_4.5.5/install/x64/mingw/lib",
                    "-lopencv_core455 ",
                    "-lopencv_imgcodecs455 ",
                    "-lopencv_imgproc455 ",
                    "-lopencv_calib3d455 ",
                    "-lopencv_dnn455 ",
                    "-lopencv_features2d455 ",
                    "-lopencv_flann455 ",
                    "-lopencv_gapi455 ",
                    "-lopencv_highgui455 ",
                    "-lopencv_ml455 ",
                    "-lopencv_objdetect455 ",
                    "-lopencv_photo455 ",
                    "-lopencv_stitching455 ",
                    "-lopencv_video455 ",
                    "-lopencv_videoio455",
                    "-Wall"
                ],
                "options": {
                    "cwd": "D:/GCC/MinGW64/bin"
                },
                "problemMatcher": [
                    "$gcc"
                ],
                "group": {
                    "kind": "build",
                    "isDefault": true
                },
                "detail": "调试器生成的任务"
            }
        ]
    }

也可以使用code-runner简单配置

"settings": {
        "code-runner.executorMap": {
            "cpp": "cd $dir && g++ *.cpp -std=c++14 -mwindows -I D:/GCC/opencv_4.5.5/install/include -L D:/GCC/opencv_4.5.5/install/x64/mingw/lib -lopencv_core455 -lopencv_imgcodecs455 -lopencv_imgproc455 -lopencv_calib3d455 -lopencv_dnn455 -lopencv_features2d455 -lopencv_flann455 -lopencv_gapi455 -lopencv_highgui455 -lopencv_ml455 -lopencv_objdetect455 -lopencv_photo455 -lopencv_stitching455 -lopencv_video455 -lopencv_videoio455 -I$workspaceRoot/include -o $workspaceRoot/bin/a",
        },
}

使用Ctrl+Shift+B或code-runner编译,文件输出到bin目录。

将图片放到bin目录,双击a.exe运行。