OpenCV4.7+Contrib+VSCode安装

发布时间 2023-06-26 11:56:31作者: rthete

下载OpenCV和Contrib

https://opencv.org/releases/

https://www.raoyunsoft.com/opencv/opencv_contrib/

编译

  1. 打开Cmake GUI

  2. 点击configure,选择Specify native compilers

  3. 点击finish,开始configure

  4. 勾选需要的再次configure,最后generate

  5. 进入生成的mingw文件夹,make

    mingw32-make -j 4

    mingw32-make install

    编译就完成了

Contrib安装

  1. 在cmake的时候勾选OPENCV_ENABLE_NONFREE并填写OPENCV_EXTRA_MODULES_PATH,建议使用图中的三个点选择位置,否则可能会报空格错误。

  2. 和之前一样进行configure和generate,最后编译。注意可能会因为网络问题无法下载一些包,需要自己下载。(见问题1)

配置VSCode

.vscode中增加三个文件:

c_cpp_properties.json

{
    "configurations": [
      {
        "name": "win32",
        "includePath": ["${workspaceFolder}/**",
            "D:/Programs/OpenCV/opencv/build/x64/mingw/install/include",
            "D:/Programs/OpenCV/opencv/build/x64/mingw/install/include/opencv2",
            "D:/Programs/OpenCV/opencv/build/x64/mingw/install/x64/mingw/lib"],
        "defines": ["_DEBUG", "UNICODE", "_UNICODE"],
        "compilerPath": "D:\\Programs\\mingw64\\bin\\g++.exe",
        "cStandard": "c11",
        "cppStandard": "c++17",
        "intelliSenseMode": "clang-x64"
      }
    ],
    "version": 4
  }

launch.json

{
    "version": "0.2.0",
    "configurations": [
      {
        "name": "g++.exe build and debug active file",
        "type": "cppdbg",
        "request": "launch",
        "program": "${fileDirname}\\Debugger\\${fileBasenameNoExtension}",
        "args": [],
        "stopAtEntry": false,
        "cwd": "${workspaceFolder}",
        "environment": [],
        "externalConsole": true,
        "MIMode": "gdb",
        "miDebuggerPath": "D:\\Programs\\mingw64\\bin\\gdb.exe",
        "setupCommands": [
          {
            "description": "Enable pretty-printing for gdb",
            "text": "-enable-pretty-printing",
            "ignoreFailures": false
          }
        ],
        "preLaunchTask": "g++.exe build active file"
      }
    ]
  }

tasks.json

{
    "version": "2.0.0",
    "tasks": [
      {
        "type": "shell",
        "label": "g++.exe build active file",
        "command": "D:/Programs/mingw64/bin/g++.exe",
            "args": [
                "-g",
                "${file}",
                "-o", "${workspaceFolder}\\Debugger\\${fileBasenameNoExtension}.exe",
                "-I", "D:/Programs/OpenCV/opencv/build/x64/mingw/install/include",
                "-I", "D:/Programs/OpenCV/opencv/build/x64/mingw/install/include/opencv2",
                "-L", "D:/Programs/OpenCV/opencv/build/x64/mingw/install/x64/mingw/lib",
                "-lopencv_core470",
                "-lopencv_imgproc470",
                "-lopencv_imgcodecs470",
                "-lopencv_video470",
                "-lopencv_ml470",
                "-lopencv_highgui470",
                "-lopencv_objdetect470",
                "-lopencv_flann470",
                "-lopencv_imgcodecs470",
                "-lopencv_photo470",
                "-lopencv_videoio470"
            ],
            "options": {
                "cwd": "D:/Programs/mingw64/bin"
            },
        "problemMatcher": ["$gcc"],
        "group": {
          "kind": "build",
          "isDefault": true
        }
      }
    ]
  }

VSCode中运行时使用F5进行调试,实际运行时发现仍需要把.dll文件放入/Debugger文件夹中。

问题

  1. cmake由于网络问题缺包,会影响后续编译

    解决方法:在CMakeDownloadLog.txt中查看下载地址和文件地址,手动下载放到文件夹里。

  1. make报错

    error: 'once_flag' in namespace 'std' does not name a type
    static std::once_flag once_flag;
    ^
    

    解决方法:重新安装mingw为posix版本。

    参考:https://stackoverflow.com/questions/34924083/mingw32-make-error-error-once-flag-in-namespace-std-does-not-name-a-type

  2. 加入contrib模块后,make过程中报的与Anaconda hdf5相关错误

    stackoverflow也有相同的问题,未解决:

    https://stackoverflow.com/questions/76411229/mingw-and-cmake-compile-opencv-including-opencv-contrib-error

    解决方法:换了一个不含Anaconda和Python的电脑,可以正常编译。

参考资料

VScode搭建Opencv(C++开发环境)_vscode opencv_河旬的博客-CSDN博客

VSCode+Opencv(C++)+Win10

OpenCV3中nonfree不存在以及contrib模块的添加的问题及解决办法_Owen_Suen的博客-CSDN博客