vscode+opencv+mingw+cmake配置vscode下的opencv环境

介绍

参考链接:https://www.cnblogs.com/czlhxm/p/13848278.html

想要使vscode能够支持windows下基于C++及mingw的OpenCV开发环境,需实现以下几个关键步骤:
(1)对于opencv的库导入和语法提示,可直接通过修改.vscode配置文件中c_cpp_properties.json实现;
(2)对于gcc对含有opencv源代码的编译,需修改task.json中编译命令行中加入相关头文件目录、链接库目录以及相关的链接库文件,而这本身opencv并不自带,需要自行通过利用cmake编译opencv源文件生成,而Cmake的编译又需要python的环境
(3)对于gdb对含opencv相关代码的可执行调试,需要gdb加载支持可执行文件中opencv相关功能的dll,这依然是通过利用cmake编译opencv源文件代码生成的.

安装VsCode

官网下载安装,并安装C++扩展

安装mingw

源码下载地址,下载posix版本的
安装步骤:
(1)下载好的文件进行解压,将该路径添加到环境变量PATH;

# 解压后的路径,不要不要有空格等
D:\mingw64\bin

(2)验证是否安装成功,win+R,打开cmd:

# 输入以下命令,可以看到有版本等信息
gcc -v
g++ -v

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

安装cmake

用来对opencv源码进行编译

下载地址
3.20版本下载地址,选择cmake-3.20.0-windows-x86_64.zip
全部版本下载地址
安装步骤:
(1)解压压缩包,添加环境变量PATH:

# 不要有空格等
D:\cmake-3.20.2\bin

(2)验证是否安装成功:

# cmd中输入命令,可以看到版本信息
cmake -version

在这里插入图片描述
在这里插入图片描述

安装opencv,以及其扩展库 opencv_contrib

opencv4以后很多功能都放在 opencv_contrib中,所以一定要安装这个库
后面部署yolov6时,要求OpenCV >= 4.5.4,后来又安装了4.6.0版本

下载地址,点进去,再点击tags,找到想要的版本,我这里装的是4.5.2,选择下载opencv-4.5.2-vc14_vc15.exe,同样下载opencv_contrib-4.5.2.zip
在这里插入图片描述
在这里插入图片描述
安装步骤:
(1)创建一个空文件夹,分别解压opencv-4.5.2-vc14_vc15.exe和opencv_contrib-4.5.2.zip到这个空文件夹中
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

安装python

下载地址,选择的是python3.8
安装步骤:
(1)点击直接安装,勾选配置环境变量(勾选了不一定有效,还得自己配置)
(2)在环境变量PATH中配置python路径

# 注意修改安装路径,这里忘记修改了,安装到了默认位置
C:\Users\chenm\AppData\Local\Programs\Python\Python38
C:\Users\chenm\AppData\Local\Programs\Python\Python38\Scripts

(3)验证是否安装成功,打开python IDE,或cmd,输入python可以看到python版本信息
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

利用cmake生成opencv的Makefile文件

步骤:
(0)需要下载一些东西,可以在hosts文件中添加下面内容,不一定有用

C:\Windows\System32\drivers\etc\hosts

185.199.108.133	raw.githubusercontent.com
185.199.109.133	raw.githubusercontent.com
185.199.110.133	raw.githubusercontent.com
185.199.111.133 raw.githubusercontent.com
# 刷新DNS
ipconfig/flushdns


打开:https://www.ipaddress.com/
搜索:raw.githubusercontent.com
添加hosts
cmd刷新:ipconfig/flushdns

参考:https://www.ioiox.com/archives/62.html

(1)在D:\cmake-3.20.2\bin目录下,打开cmake-gui.exe

  • 在D:/opencv-4.5.2/opencv/build/x64/下创建一个空文件夹mingw,用于存放编译后的文件

  • source code那选择:D:/opencv-4.5.2/opencv/sources

  • build the binaries那选择:D:/opencv-4.5.2/opencv/build/x64/mingw

  • 点击Configure,跳出的对话框中选择MinGW Makefiles(一定要是MinGW Makefiles),并选择第二项Specify native compilers

  • 点击next,再弹出德对话框中选择Mingw的编译器

  • 点击finish,就会开始编译

    在这里插入图片描述
    在这里插入图片描述
    后面的就很重要了,finish结束后,应该会有很多文件没有成功下载的

  • 去D:\opencv-4.5.2\opencv\build\x64\mingw目录下,打开CMakeDownloadLog.txt文件,上面有说XXX目录缺少XXX文件,就根据上面的下载地址,自己用迅雷等下载,并按要求直接复制到指定文件夹中

    在这里插入图片描述

    大致意思是:D:/opencv-xxx/opencv/build/x64/mingw/3rdparty/ffmpeg文件夹中缺少opencv_videoio_ffmpeg.dll,获取这个文件的步骤是:(1)从"https://raw.githubusercontent.com/opencv/opencv_3rdparty/629590c3ba09fb0c8eaa9ab858ff13d3a84ca1aa/ffmpeg/opencv_videoio_ffmpeg.dll"下载文件;(2)这个文件的hash编码是"638065d5a0dab8a828879942375dcac4",重命名下载文件为5573e2262ad1298e603122b7759fc2f6-opencv_videoio_ffmpeg.dll;(3)将重命名的文件复制到D:/opencv-4.6.0/opencv/sources/.cache/ffmpeg中,之后Condifgure时会从.cache中自己处理这个文件;其实.cache这一步可以省略,直接下载文件,不用hash码重命名,直接复制到D:/opencv/build/x64/mingw/3rdparty/ffmpeg中就行

    注意:要看下.cache文件下几个文件的大小,如果大小一直为0的话,可能也会一直失败,可以删除这里的文件或复制下载好的文件,并重命名
    如果配置了hosts有用,可以下载,需要多重试几次Configure
    在这里插入图片描述

  • 缺的文件全部弄好后,在修改下配置文件,在Search这栏搜索opencv_extra 可以看到有这一项:OPENCV_EXTRA_MODULES_PATH,然后Value栏选怎opencv的扩展文件D:\opencv-4.5.2\opencv_contrib-4.5.2\modules
    在这里插入图片描述

  • 取消勾选BUILD_opencv_face,因为这个库编译总不成功,而且也是一个不用的库
    在这里插入图片描述

  • 取消全部test相关的,没必要,可能影响编译
    在这里插入图片描述

  • 取消BUILD_opencv_world,这个好像是说将编译好的库,再压缩成什么,没必要,而且勾选的话也是一直编译不成功的
    在这里插入图片描述

  • 看看有没有ENABLE_CXX11,没有的话,点击右上方的添加,注意value勾选

    在这里插入图片描述
    如果有GPU的,输入cuda,勾选…(后续补充)

  • 以上配置的差不多了,点击Configure,再看看CMakeDownloadLog.txt,能看到以下信息,并且框中没有红字后(有时候需要重复几次Configure),再点击旁边的Generate,最后有Configure done generate done就成功了
    在这里插入图片描述
    在这里插入图片描述

cmake命令进行编译,安装

在D:\opencv-4.6.0\opencv\build\x64\mingw da窗口依次输入下面两个命令,输入第一个命令可能不成功

minGW32-make 或者 minGW32-make -j 4 (-j 4 表示4进程,根据自己机器情况设置,还可以8,16)

minGW32-make install

4.5.2版本BUG:

minGW32-make后可能出现下面BUG,参考https://www.codeleading.com/article/51025552597/
在这里插入图片描述
解决步骤:
(1)定位到你的opencv_contrib\modules\wechat_qrcode\src\zxing这一目录下,打开zxing.hpp文件
(2)将第30行的#if defined(ANDROID_API)改为#if defined(ANDROID_API) || defined(_MSC_VER) || defined(MINGW32) || defined(MINGW64)
(3)删掉第54到第62行的内容
(4)保存文件,重新Configure,Generate,再编译

4.6.0版本BUG:

BUG1:

在这里插入图片描述
解决方法:
(1)安装的cmake版本过低,重新安装更高版本的cmake,删除mingw文件,点击Cmake-gui上file->Delete Cache,重新configure和Generate
在这里插入图片描述

BUG2

modules/world/CMakeFiles/opencv_world.dir/vs_version.rc.obj 中缺少vs_version.rc.obj 文件
在这里插入图片描述
解决方法:
通过windres.exe工具对vs_version.rc编译生成vs_version.rc.obj文件,注意路径
(1)everything搜vs_version.rc文件,一般在在C:\opencv-4.5.5\opencv\build\x64\mingw\modules\world目录下;
(2)搜windres.exe位置,一般在D:\mingw64\bin目录下;
(3)切换到C:\opencv-4.5.5\opencv\build\x64\mingw\modules\world\CMakeFiles\opencv_world.dir 目标路径下,执行下面语句:
(4)重新执行minGW32-make -j 16

cd /d C:\opencv-4.5.5\opencv\build\x64\mingw\modules\world\CMakeFiles\opencv_world.dir

D:/mingw64/bin/windres.exe  C:\opencv-4.5.5\opencv\build\x64\mingw\modules\world\vs_version.rc -O coff .\vs_version.rc.obj

在这里插入图片描述
在这里插入图片描述

BUG3

在这里插入图片描述
解决方法:
找到对应的日志C:\opencv-4.5.5\opencv\build\x64\mingw\modules\world\CMakeFiles\opencv_world.dir
在这里插入图片描述

bin/libopencv_world455.dll: modules/world/CMakeFiles/opencv_world.dir/linkLibs.rsp
bin/libopencv_world455.dll: modules/world/CMakeFiles/opencv_world.dir/objects1
bin/libopencv_world455.dll: modules/world/CMakeFiles/opencv_world.dir/link.txt
	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=C:\opencv-4.5.5\opencv\build\x64\mingw\CMakeFiles --progress-num=$(CMAKE_PROGRESS_1022) "Linking CXX shared library ..\..\bin\libopencv_world455.dll"
	cd /d C:\opencv-4.5.5\opencv\build\x64\mingw\modules\world && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles\opencv_world.dir\link.txt --verbose=$(VERBOSE)

# Rule to build all files generated by this target.
modules/world/CMakeFiles/opencv_world.dir/build: bin/libopencv_world455.dll
.PHONY : modules/world/CMakeFiles/opencv_world.dir/build

modules/world/CMakeFiles/opencv_world.dir/clean:
	cd /d C:\opencv-4.5.5\opencv\build\x64\mingw\modules\world && $(CMAKE_COMMAND) -P CMakeFiles\opencv_world.dir\cmake_clean.cmake
.PHONY : modules/world/CMakeFiles/opencv_world.dir/clean

在这里插入图片描述
根据build.make中的错误行,自己修改编译命令,手动生成vs_version.rc.obj,并重新mingw32-make

cd /d C:\opencv-4.5.5\opencv\build\x64\mingw\modules\world
D:\cmake-3.25.1\bin\cmake.exe -E cmake_link_script CMakeFiles\opencv_world.dir\link.txt --verbose=$(VERBOSE)

配置opencv环境变量

在这里插入图片描述

配置VSCODE

新建一个.vscode文件夹,新建c_cpp_properties.json,lunch.json,task.json
c_cpp_properties.json

{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}/**",
                "D:/opencv-4.5.2/opencv/build/x64/mingw/install/include",
                "D:/opencv-4.5.2/opencv/build/x64/mingw/install/include/opencv2"

            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "windowsSdkVersion": "10.0.17763.0",
            "compilerPath": "D:/mingw64/bin/g++.exe",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "${default}"
        }
    ],
    "version": 4
}

launch.json

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        
        
        {
            "name": "(gdb) Launch",
            "preLaunchTask": "g++",//调试前执行的任务,就是之前配置的tasks.json中的label字段,"Compile" "g++.exe build active file"
            "type": "cppdbg",//配置类型,只能为cppdbg
            "request": "launch",//请求配置类型,可以为launch(启动)或attach(附加)
            "program": "${fileDirname}\\Debugger\\${fileBasenameNoExtension}.exe",//调试程序的路径名称,这个Debugger需要自己创建,为了方便放置生成的exe文件
            "args": [],//调试传递参数
            "stopAtEntry": false, // 设为true时程序将暂停在程序入口处,相当于在main上打断点
            "cwd": "${workspaceFolder}",  // 调试程序时的工作目录,此为工作区文件夹;改成${fileDirname}可变为文件所在目录
            "environment": [],
            "externalConsole": true,//true显示外置的控制台窗口,false显示内置终端
            "internalConsoleOptions": "neverOpen", // 如果不设为neverOpen,调试时会跳到“调试控制台”选项卡,你应该不需要对gdb手动输命令吧
            "MIMode": "gdb",
            "miDebuggerPath": "D:/mingw64/bin/gdb.exe",// 调试器路径,Windows下后缀不能省略,Linux下则不要
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": false
                }
            ]
        }
    ]
}

tasj.json

{
	"version": "2.0.0",
	"tasks": [
		{
			// "type": "cppbuild",
			"label": "g++", // 任务名称,与launch.json的preLaunchTask相对应,或者选择Compile或者"C/C++: g++.exe 生成活动文件"
			"command": "D:/mingw64/bin/g++.exe", // 要使用的编译器,C++用g++
			"args": [
				"-fdiagnostics-color=always",
				"-g", // 生成和调试有关的信息
				"${file}", //当前文件名
				"-o", // 指定输出文件名,不加该参数则默认输出a.exe,Linux下默认a.out
				"${fileDirname}\\Debugger\\${fileBasenameNoExtension}.exe",
				"-m64", // 不知为何有时会生成16位应用而无法运行,加上此条可强制生成64位的
				"-Wall", // 开启额外警告
            	"-static-libgcc",     // 静态链接libgcc,一般都会加上
				"-finput-charset=UTF-8",
            	"-fexec-charset=GBK", // 生成的程序使用GBK编码,不加这条会导致Win下输出中文乱码;繁体系统改成BIG5
            	"-std=c++17", // 要用的语言标准,根据自己的需要修改。c++可用c++14
				// 扩展参数
				// -I 头文件目录
				// -L 库文件目录
				// -l 库文件
				"-I", "D:/opencv-4.5.2/opencv/build/x64/mingw/install/include",
				"-I", "D:/opencv-4.5.2/opencv/build/x64/mingw/install/include/opencv2",
				"-L", "D:/opencv-4.5.2/opencv/build/x64/mingw/install/x64/mingw/bin",

				// "-l", "libopencv_calib3d452",
				// "-l", "libopencv_core452",
				// "-l", "libopencv_dnn452",
				// "-l", "libopencv_features2d452",
				// "-l", "libopencv_flann452",
				// "-l", "libopencv_gapi452",
				// "-l", "libopencv_highgui452",
				// "-l", "libopencv_imgcodecs452",
				// "-l", "libopencv_imgproc452",
				// "-l", "libopencv_ml452",
				// "-l", "libopencv_objdetect452",
				// "-l", "libopencv_photo452",
				// "-l", "libopencv_stitching452",
				// "-l", "libopencv_video452",
				// "-l", "libopencv_videoio452",
				// "-l", "libopencv_ximgproc452" ,

				"-l", "libopencv_aruco452",
				"-l", "libopencv_bgsegm452",
				"-l", "libopencv_bioinspired452",
				"-l", "libopencv_calib3d452",
				"-l", "libopencv_ccalib452",
				"-l", "libopencv_core452",
				"-l", "libopencv_datasets452",
				"-l", "libopencv_dnn452",
				"-l", "libopencv_dnn_objdetect452",
				"-l", "libopencv_dnn_superres452",
				"-l", "libopencv_dpm452",
				"-l", "libopencv_features2d452",
				"-l", "libopencv_flann452",
				"-l", "libopencv_fuzzy452",
				"-l", "libopencv_gapi452",
				"-l", "libopencv_hfs452",
				"-l", "libopencv_highgui452",
				"-l", "libopencv_imgcodecs452",
				"-l", "libopencv_imgproc452",
				"-l", "libopencv_img_hash452",
				"-l", "libopencv_intensity_transform452",
				"-l", "libopencv_line_descriptor452",
				"-l", "libopencv_mcc452",
				"-l", "libopencv_ml452",
				"-l", "libopencv_objdetect452",
				"-l", "libopencv_optflow452",
				"-l", "libopencv_phase_unwrapping452",
				"-l", "libopencv_photo452",
				"-l", "libopencv_plot452",
				"-l", "libopencv_quality452",
				"-l", "libopencv_rapid452",
				"-l", "libopencv_reg452",
				"-l", "libopencv_rgbd452",
				"-l", "libopencv_saliency452",
				"-l", "libopencv_shape452",
				"-l", "libopencv_stereo452",
				"-l", "libopencv_stitching452",
				"-l", "libopencv_structured_light452",
				"-l", "libopencv_superres452",
				"-l", "libopencv_surface_matching452",
				"-l", "libopencv_text452",
				"-l", "libopencv_tracking452",
				"-l", "libopencv_video452",
				"-l", "libopencv_videoio452",
				"-l", "libopencv_videostab452",
				"-l", "libopencv_wechat_qrcode452",
				"-l", "libopencv_xfeatures2d452",
				"-l", "libopencv_ximgproc452",
				"-l", "libopencv_xobjdetect452",
				"-l", "libopencv_xphoto452",
				"-l", "opencv_videoio_ffmpeg452_64"
				// 这行是博主自己添加的扩展动态链接库,没安装扩展的这行可以删除。
			],// 编译的命令,其实相当于VSC帮你在终端中输了这些东西
			"options": {
				"cwd": "D:/mingw64/bin"
			},
			"problemMatcher": [ // 捕捉编译时终端里的报错信息到问题面板中,修改代码后需要重新编译才会再次触发
				"$gcc"
			],
			// "group": "build",
			// "detail": "编译器: D:/mingw64/bin/g++.exe",

			"type": "shell", // process是把预定义变量和转义解析后直接全部传给command;shell相当于先打开shell再输入命令,所以args还会经过shell再解析一遍
			"group": {
				"kind": "build",
				"isDefault": true // 不为true时ctrl shift B就要手动选择了
			},
			"presentation": {
				"echo": true,
				"reveal": "always", // 执行任务时是否跳转到终端面板,可以为always,silent,never。具体参见VSC的文档
				"focus": false,     // 设为true后可以使执行task时焦点聚集在终端,但对编译C/C++来说,设为true没有意义
				"panel": "shared"   // 不同的文件的编译信息共享一个终端面板
			}
		}
	]
}

在这里插入图片描述

测试DEMO

点击F5运行程序,可以看到有图片显示就成功了

#include <opencv2/opencv.hpp>

// using namespace 指令,这样在使用命名空间时就可以不用在前面加上命名空间的名称 
using namespace cv;

int main(void)
{
    // C++中Mat表示图像的内存对象,所有的图像对象皆为Mat
    // 通道顺序:B,G,R
    Mat srcImage = imread("F:\\VOCtrainval_11-May-2012\\VOCdevkit\\VOC2012\\JPEGImages\\2007_000027.jpg"); // 载入指定路径的图像

    // WINDOW_AUTOSIZE自适应调整窗口大小,WINDOW_FREERATIO自由屏幕窗口,可以手动调整窗口大小
    namedWindow("input", WINDOW_FREERATIO); 

    std::cout << "Mat格式:" <<srcImage.depth()<< std::endl;

    // imshow只支持0~255像素格式图像的显示或浮点数数据的显示
    imshow("input", srcImage); // 显示该图像

    waitKey(0); // 表示阻塞等待用户键盘输入,用户按键盘任意键就会停止阻塞,继续执行直到程序正常退
    destroyAllWindows();
    
    return 0;
}

在这里插入图片描述

  • 5
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要在VS Code中使用CMake配置OpenCV C++项目,可以按照以下步骤进行操作: 1. 确保已经安装了Visual Studio Code和CMake,并将它们添加到系统的环境变量中。 2. 创建一个新的文件夹作为您的项目文件夹,并在其中创建一个CMakeLists.txt文件。在CMakeLists.txt中,输入以下内容: ```cmake cmake_minimum_required(VERSION 3.0) project(YourProjectName) find_package(OpenCV REQUIRED) add_executable(YourExecutableName main.cpp) target_link_libraries(YourExecutableName ${OpenCV_LIBS}) ``` 这个CMakeLists.txt文件指定了项目的最低CMake版本、项目名称以及要使用的OpenCV库。 3. 在项目文件夹中创建一个main.cpp文件,并编写您的OpenCV C++代码。 4. 打开Visual Studio Code,选择“文件”->“打开文件夹”,并选择您的项目文件夹。 5. 安装CMake Tools插件。在Visual Studio Code的扩展面板中搜索"CMake Tools"并安装。 6. 在Visual Studio Code的底部状态栏,找到一个齿轮图标,点击它以打开CMake Tools。 7. 在CMake Tools的侧边栏中,选择您的项目文件夹并点击“配置”。 8. 在弹出的对话框中,选择一个构建目录(可以是您项目文件夹下的子文件夹),然后选择CMake工具链。 9. 在弹出的对话框中,输入以下参数并保存: - "cmake.configureOnOpen": false - "cmake.buildDirectory": "build" 这些参数将配置CMake Tools以在打开项目时不自动运行CMake,并将生成的文件放在名为"build"的文件夹中。 10. 回到CMake Tools的侧边栏,点击“配置”按钮,然后选择“生成”按钮。这将运行CMake生成您的项目。 11. 在CMake Tools的侧边栏中,点击“构建”按钮来编译您的项目。 12. 您可以在Visual Studio Code的终端中运行您的可执行文件,或者根据需要进行调试。 这样,您就可以在VS Code中使用CMake配置OpenCV C++项目了。记得根据您的具体项目情况修改CMakeLists.txt和main.cpp文件。祝您成功!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值