vscode+opencv3 windows下编译 调试cpp文件 json方法和CMakeLists.txt方法

由于vscode能够跨平台使用,且有丰富的扩展包,所以我打算放弃vs2010投入vscode的怀抱(小白理解,欢迎大神指教!)

在windows平台下,使用vscode+opencv3显示图片:

首先使用CMake和MinGW-w64的编译安装OpenCV3.4.1,点击链接查看安装过程。

vscode opencv C++配置

共有两种方法:

  • json文件配置方法
  • CMakeLists.txt配置方法

json文件配置方法

  1. cpp测试代码
    我测试时用的是opencv自带的stereo_calib.cpp文件
    cpp文件路径及测试图像路径:

D:\ProgramInstallFiles\OpenCV341\opencv\sources\samples\cpp
D:\ProgramInstallFiles\OpenCV341\opencv\sources\samples\data

data中的 left01.jpg-left14.jpg,right01.jpg-right14.jpg,stereo_calib.xml 这些文件都拷到workspaceFolder下。

这里随便找了一个,显示图片:

#include<opencv2/opencv.hpp>
#include<opencv2/highgui.hpp>
using namespace cv;
int main()
{
   Mat img=imread("lena.jpg");
   cv::imshow("image",img);
   cv::waitKey();
   return 0;
}

  1. launch.json

F1
输入launch
选择Debug:open launch.json

生成launch.json
需要注意的是:
miDebuggerPath是mingw下gdb.exe的路径

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",//stereo_calib
            "program": "${workspaceFolder}/${fileBasenameNoExtension}",
            //"program": "${fileBasenameNoExtension}.o",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": true,
            "MIMode": "gdb",
            "miDebuggerPath": "D:\\ProgramInstallFiles\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\mingw64\\bin\\gdb.exe",
            "preLaunchTask": "g++",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

${workspaceFolder} 表示当前工作目录,{fileBasenameNoExtension}表示当前文件名,不包括扩展
“program”: “${workspaceFolder}/${fileBasenameNoExtension}.o”,表示生成的执行文件在当前目录下,和当前文件同名,只是扩展为.o
执行文件:stereo_calib.o
"preLaunchTask": “g++”,是默认launch.json中没有的,表示执行文件前需要的编译任务。具体的任务内容我们在task.json中定义。

  1. c_cpp_properties.json

F1
c/c++: Edit configurations(JSON)
生成 c_cpp_properties.json

“includePath”:中加入编译好的opencv include 路径
compilerPath:mingw下gcc.exe路径

 {
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}/**",
                "D:/ProgramInstallFiles/OpenCV341/opencv_mingw64_build/install/include",
                "D:/ProgramInstallFiles/OpenCV341/opencv_mingw64_build/install/include/opencv",
                "D:/ProgramInstallFiles/OpenCV341/opencv_mingw64_build/install/include/opencv2"
                
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "compilerPath": "D:\\ProgramInstallFiles\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\mingw64\\bin\\gcc.exe",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "configurationProvider": "vector-of-bool.cmake-tools",
            "intelliSenseMode": "clang-x64"
        }
    ],
    "version": 4
}

  1. tasks.json

F1
Tasks:configure task

生成task文件

{
   "tasks": [
       {
           "type": "shell",
           "label": "g++",
           "command":"g++",
           //"command": "D:\\ProgramInstallFiles\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\mingw64\\bin\\g++.exe",
           "args": [
               "-g",
               "-std=c++11",
               "${file}",
               "-o",
               "${fileBasenameNoExtension}",
               // OpenCV 3.4.1
               "-I","D:/ProgramInstallFiles/OpenCV341/opencv_mingw64_build/install/include",
               "-I","D:/ProgramInstallFiles/OpenCV341/opencv_mingw64_build/install/include/opencv",
               "-I","D:/ProgramInstallFiles/OpenCV341/opencv_mingw64_build/install/include/opencv2",
               "-L","D:/ProgramInstallFiles/OpenCV341/opencv_mingw64_build/install/x64/mingw/lib",
               "-l","libopencv_core341",
               "-l","libopencv_highgui341",    
               "-l","libopencv_imgproc341",
               "-l","libopencv_imgcodecs341",
               "-l","libopencv_calib3d341"
           ],
           "problemMatcher":{
               "owner": "cpp",
               "fileLocation":["relative","${workspaceFolder}"],
               "pattern":{
                   "regexp": "^([^\\\\s].*)\\\\((\\\\d+,\\\\d+)\\\\):\\\\s*(.*)$",
                   "file": 1,
                   "location": 2,
                   "message": 3
               }

           }
       }
   ],
   "version": "2.0.0"
}

重点:** “args”: **加入需要链接的opencv库和mingw lib 根据自己需求填写
注意,opencv3显示图像需要libopencv_imgcodecs341这个库(相较opencv2做的改变)

"-I","D:/ProgramInstallFiles/OpenCV341/opencv_mingw64_build/install/include",
"-I","D:/ProgramInstallFiles/OpenCV341/opencv_mingw64_build/install/include/opencv",
"-I","D:/ProgramInstallFiles/OpenCV341/opencv_mingw64_build/install/include/opencv2",
"-L","D:/ProgramInstallFiles/OpenCV341/opencv_mingw64_build/install/x64/mingw/lib",
"-l","libopencv_core341",
"-l","libopencv_highgui341",    
"-l","libopencv_imgproc341",
"-l","libopencv_imgcodecs341",
"-l","libopencv_calib3d341"
  1. 最后,在需要调试的cpp文件下,按F5
  2. done!
> Executing task: g++ -g -std=c++11 h:\project\visCalib\calib01\stude -I D:/ProgramInstallFiles/OpenCV341/opencv_mingw64_build/instaD:/ProgramInstallFiles/OpenCV341/opencv_mingw64_build/install/x64/41 -l libopencv_calib3d341 <


Terminal will be reused by tasks, press any key to close it.

参考(感谢!):but 这个链接一点就会出弹窗。。。http://www.pianshen.com/article/8044333624/#3MinGw__41

CMakeLists.txt 方法

# 使用CMake Tools插件(可选,如果这个项目去到一个没有这个插件的机器也同样可以生成项目)  
include(CMakeToolsHelpers OPTIONAL)  
  
# CMake 最低版本号要求  
cmake_minimum_required(VERSION 2.8)  
  
# 项目名称  
project(stereo_calib)  
  
# 查找当前目录下的所有源文件  
# 并将名称保存到 DIR_ROOT_SRCS变量  
aux_source_directory(. DIR_ROOT_SRCS)  
  
#添加opencv头文件的搜索路径    
INCLUDE_DIRECTORIES(D:/ProgramInstallFiles/OpenCV341/opencv_mingw64_build/install/include/opencv)  
INCLUDE_DIRECTORIES(D:/ProgramInstallFiles/OpenCV341/opencv_mingw64_build/install/include/opencv2)  
INCLUDE_DIRECTORIES(D:/ProgramInstallFiles/OpenCV341/opencv_mingw64_build/install/include)  
  
# 查找路径下的所有源文件  
aux_source_directory(. DIR_LIB_SRCS)  
  
# 生成链接库  
add_library(OpencvLib ${DIR_LIB_SRCS})  
  
# 添加链接库    
TARGET_LINK_LIBRARIES(OpencvLib D:/ProgramInstallFiles/OpenCV341/opencv_mingw64_build/install/x64/mingw/lib/libopencv_core341.dll.a)    
TARGET_LINK_LIBRARIES(OpencvLib D:/ProgramInstallFiles/OpenCV341/opencv_mingw64_build/install/x64/mingw/lib/libopencv_highgui341.dll.a)    
TARGET_LINK_LIBRARIES(OpencvLib D:/ProgramInstallFiles/OpenCV341/opencv_mingw64_build/install/x64/mingw/lib/libopencv_imgproc341.dll.a) 
TARGET_LINK_LIBRARIES(OpencvLib D:/ProgramInstallFiles/OpenCV341/opencv_mingw64_build/install/x64/mingw/lib/libopencv_imgcodecs341.dll.a) 
TARGET_LINK_LIBRARIES(OpencvLib D:/ProgramInstallFiles/OpenCV341/opencv_mingw64_build/install/x64/mingw/lib/libopencv_calib3d341.dll.a)

# 指定生成目标  
add_executable(stereo_calib stereo_calib.cpp ${DIR_ROOT_SRCS})  
  
# 添加链接库  
target_link_libraries(stereo_calib OpencvLib)  

需要注意的几点:

  1. 项目名称记得改:
project(stereo_calib)  
add_executable(stereo_calib stereo_calib.cpp ${DIR_ROOT_SRCS})  
target_link_libraries(stereo_calib OpencvLib)  

应该是这三个地方

  1. cpp文件名需要改
add_executable(stereo_calib stereo_calib.cpp ${DIR_ROOT_SRCS})  
  1. 链接库
    是mingw编译好的opencv下 的lib,按需修改
TARGET_LINK_LIBRARIES(OpencvLib D:/ProgramInstallFiles/OpenCV341/opencv_mingw64_build/install/x64/mingw/lib/libopencv_core341.dll.a)    
TARGET_LINK_LIBRARIES(OpencvLib D:/ProgramInstallFiles/OpenCV341/opencv_mingw64_build/install/x64/mingw/lib/libopencv_highgui341.dll.a)    
TARGET_LINK_LIBRARIES(OpencvLib D:/ProgramInstallFiles/OpenCV341/opencv_mingw64_build/install/x64/mingw/lib/libopencv_imgproc341.dll.a) 
TARGET_LINK_LIBRARIES(OpencvLib D:/ProgramInstallFiles/OpenCV341/opencv_mingw64_build/install/x64/mingw/lib/libopencv_imgcodecs341.dll.a) 
TARGET_LINK_LIBRARIES(OpencvLib D:/ProgramInstallFiles/OpenCV341/opencv_mingw64_build/install/x64/mingw/lib/libopencv_calib3d341.dll.a)

然后,执行命令:

cmake -G “MinGW Makefiles”
mingw32-make
stereo_calib.exe

错误处理:

error: ‘::_hypot’ has
not been declared
using ::hypot;
^~~~~


In file included from D:/ProgramInstallFiles/OpenCV341/opencv_mingw64_build/install/include/opencv2/core/cvstd.hpp:62,
                 from D:/ProgramInstallFiles/OpenCV341/opencv_mingw64_build/install/include/opencv2/core/base.hpp:58,
                 from D:/ProgramInstallFiles/OpenCV341/opencv_mingw64_build/install/include/opencv2/core.hpp:54,
                 from D:/ProgramInstallFiles/OpenCV341/opencv_mingw64_build/install/include/opencv2/calib3d.hpp:47,
                 from h:\project\visCalib\calib01\stereo_calib.cpp:24:
D:/ProgramInstallFiles/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/cmath:1122:11: error: '::_hypot' has not been declared
   using ::hypot;
           ^~~~~
The terminal process terminated with exit code: 1

Terminal will be reused by tasks, press any key to close it.

解决:

  1. 找到你的mingw64文件夹下路径D:\ProgramInstallFiles\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\lib\gcc\x86_64-w64-mingw32\8.1.0\include\c++
  2. 找到cmath文件
    在这里插入图片描述
  3. 在文件头添加

#define _hypot hypot

  1. 保存并重新运行
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值