visual studio code搭建opencv环境

2023-10-26

前言

前段时间我想学习opencv,由于我一直都习惯于用vscode来编写代码,所以还是决定用vscode来搭建opencv环境。我查阅过许多文章搭建环境,而后选择了一篇文章的方法,该文章确实详细,但我觉得还是有一些细节没能说清楚,我后来借助了其它一篇文章的一个步骤才成功把环境搭建完成。因此决定结合这篇文章及自身体验来说一下opencv的环境搭建步骤。

资源下载

MinGW-w64离线包下载地址: https://sourceforge.net/projects/mingw-w64/files/.
在线包下载会很慢,所以可以直接下载离线包。
在这里插入图片描述

CMake下载地址:https://cmake.org/download/.
CMake要选择二进制文件,即Binary distributions栏目。选择对应自己电脑的文件下载
CMake网站页
opencv库: https://sourceforge.net/projects/opencvlibrary/.

软件安装与配置环境变量

安装?

MinGW-w64与CMake都不用安装,只需要解压到存放的自选路径(类似于安装路径)即可

配置环境变量

找到下图的MinGW-w64文件夹位置:
在这里插入图片描述
添加该路径到环境变量,如我配置:F:\MINGW64\mingw64\bin。
添加环境变量方法:右键我的电脑–>高级系统设置–>环境变量–>选择在用户变量和系统变量都可以,双击path添加路径–>确定即可
在这里插入图片描述
找到下图的CMake文件夹位置:
在这里插入图片描述
添加该路径到环境变量,如我的配置:F:\CMAKE\bin。

找到下图的opencv文件夹位置:
在这里插入图片描述
添加该路径到环境变量,如:F:\opencv4.5.1\opencv\build\x64\mingw\bin。

目前应具备的环境变量path
在这里插入图片描述
检查环境变量是否添加成功:
win+R键输入cmd到终端:
在这里插入图片描述
在这里插入图片描述
在终端的命令有点不同,我的是gcc -v和cmake --version,是-v还是–version我也不清楚

生成MakeFiles

在操作cmake-gui前,如果没有翻过墙的话,要先在C:\Windows\System32\drivers\etc\hosts文件最后追加:

151.101.72.133 raw.githubusercontent.com

因为cmake-gui会下载一些文件,这些文件都在raw.githubusercontent.com上,如果不修改一下hosts,许多文件很可能会下载失败。

修改方法:将hosts文件以记事本的方式打开进行编辑,或直接拖到vsocde打开修改即可。若修改了但保存不了这种问题可以先复制一份,将原来的那份文件删除,将修改好的文件复制回原位置即可。

打开cmake-gui后选择源文件路径和MakeFiles保存路径(自选路径),如图:
在这里插入图片描述
点击Configure,弹出窗口配置如下:
在这里插入图片描述
要注意下拉框选择的是MinGW,不要看岔了。之后点击Next,选择MinGW文件中编译工具如下,最后点击Finish。
在这里插入图片描述
执行过程中消息框会出现一堆红色信息,最后显示Configure done,是正常的。如果执行时中断,则存在其他问题。在执行完后,勾选BUILD_opencv_world,WITH_OPENGL和BUILD_EXAMPLES,不勾选WITH_IPP、WITH_MSMF和ENABLE_PRECOMPILED_HEADERS(如果有的话),CPU_DISPATCH选空。如果要编译opencv_contrib,则需要在OPENCV_EXTRA_MODULES_PATH 把路径选择为解压的opencv_contrib文件中的“modules”文件夹。

再次点击Configure,这次执行完后仍有错误如下:
在这里插入图片描述
也就是说前面虽然修改了hosts,但是有些文件仍然没有成功下载,解决的方法就是手动下载它们。可以用浏览器访问下载链接,或者使用迅雷等下载器进行下载。CMakeDownloadLog.txt文件中列出了所有丢失文件的下载链接,比如:

https://raw.githubusercontent.com/opencv/opencv_3rdparty/759a23e24ab787a0979f8a93103dcc3105ec10c1/ffmpeg/opencv_ffmpeg.dll

一个个访问这些链接,下载后放到OpenCV源文件里.cache的相应子文件夹中替代原缓存文件(下载的文件重命名为相应地缓存文件名并删除原缓存文件)。这样从头到尾下载CMakeDownloadLog.txt中列出的所有丢失文件,之后,再次Configure,理论上不会出现红色的错误消息了。然后点击Generate,正常的话会显示非红色的消息Generate Done。一般翻墙成功的话都可以直接下载成功

编译opencv

CMD到MakeFiles所在文件夹,执行minGW32-make命令,或者使用多线程minGW32-make -j 4命令:在这里插入图片描述
如果报错可查阅下面的网址帮助:

https://blog.huihut.com/2018/07/31/CompiledOpenCVWithMinGW64/

一般问题都是可以通过勾选和去勾选解决的,因为之前就Configure过,因此回头再Configure一下花不了太多时间。

如果同时编译opencv_contrib,可能会报如下错误:
在这里插入图片描述
编译完成之后,输入minGW32-make install 来完成装载。

minGW32-make install

vscode配置

在VScode中安装C/C++扩展,添加以下三个json文件:

launch.json 需要配置miDebuggerPath项。

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "opencv4.5.1 debuge",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}\\${fileBasenameNoExtension}.exe",
            "args": [],
            "stopAtEntry": true,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": true,
            "MIMode": "gdb",
            "miDebuggerPath": "F:/MINGW64/mingw64/bin/gdb.exe",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": false
                }
            ],
            "preLaunchTask": "opencv4.5.1 compile task"
        }
    ]
}

c_cpp_properties.json 需要配置compilerPath项和includePath项。

{
    "configurations": [
        {
            "name": "win",
            "includePath": [
                "${workspaceFolder}/**",
                "F:/opencv4.5.1/opencv/build/x64/mingw/install/include",
                "F:/opencv4.5.1/opencv/build/x64/mingw/install/include/opencv2",
                "F:/opencv4.5.1/opencv/build/x64/mingw/install/include/opencv2/myself_all"
            ],
            "defines": [],
            "compilerPath": "F:/MINGW64/mingw64/bin/gcc.exe",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "clang-x64"
        }
    ],
    "version": 4
}

tasks.json 需要配置command项、args项和options项。

{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "shell",
            "label": "opencv4.5.1 compile task",
            "command": "F:/MINGW64/mingw64/bin/g++.exe",
            "args": [
                "-g",
                "${file}",
                "-o",
                "${workspaceFolder}\\${fileBasenameNoExtension}.exe",
                "F:/opencv4.5.1/opencv/build/x64/mingw/install/x64/mingw/bin/libopencv_world451.dll",
                "-I",
                "F:/opencv4.5.1/opencv/build/x64/mingw/install/include",
                "-I",
                "F:/opencv4.5.1/opencv/build/x64/mingw/install/include/opencv",
                "-I",
                "F:/opencv4.5.1/opencv/build/x64/mingw/install/include/opencv2",
            ],
            "options": {
                "cwd": "F:/MINGW64/mingw64/bin"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}

注意:如果是复制我的文件配置的话记得把opencv4.5.1改为你的对应版本

验证程序:Ctrl+Shift+B编译即可生成对应exe文件,然后F5运行。

#include<opencv2\opencv.hpp>
#include <iostream>
using namespace cv;
int main(int argc, char** argv) {
    Mat src = imread("image/girl.jpg"); //图片路径为同一文件夹
    namedWindow("window_1",0);
    imshow("window_1", src);
    waitKey(0);
    return 0;
}

参考链接:

KenSporger的博客园: https://www.cnblogs.com/kensporger/p/12320622.html.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

visual studio code搭建opencv环境 的相关文章

  • 使用 gcc 在 Linux 上运行线程构建块 (Intel TBB)

    我正在尝试为线程构建块构建一些测试 不幸的是 我无法配置 tbb 库 链接器找不到库 tbb 我尝试在 bin 目录中运行脚本 但这没有帮助 我什至尝试将库文件移动到 usr local lib 但这又失败了 任何的意见都将会有帮助 确定您
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • 为什么 GCC 不允许我创建“内联静态 std::stringstream”?

    我将直接前往 MCVE include
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat

随机推荐

  • 蒙特卡洛量化分析方法

    蒙特卡洛方法主要思想 对于一个随机系统 输出随输入变化是随机的 那么通过重复采样的方法可以得到输出的具体分布 进而再对输出分布形式进行分析 大数定律 当在试验不变的条件下 重复试验多次 随机事件的频率近似于它的概率 将上述思想用于量化分析
  • 常见国内镜像源地址

    常见国内镜像源地址 常见的pip后面的镜像源地址 常见国内镜像源地址 常见的pip后面的镜像源地址 清华大学 https pypi tuna tsinghua edu cn simple 阿里云 http mirrors aliyun co
  • ABAP:ONCHANGEOF的坑

    以下文章来源于ABAPer孙亮 作者孙小亮 ABAPer孙亮 绝对 有用 实用 的ABAP与Excel 原创 干货 不定期发布 可加vx 286503700交流 1 7 背景 由于AT NEW field会判断field和它前面的所有字段
  • 靠营销出圈的拉面说,会是下一个黄太吉吗?

    乘着 宅经济 一人食 的东风 方便速食这一餐饮细分赛道愈发火热 CBNData发布的 2021方便速食行业洞察报告 数据显示 方便速食行业近年来规模增长稳健 预估国内市场规模超2500亿元 而线上市场近一年的增长率更是超过了70 广阔的市场
  • DataGrip汉化设置

    左上角file settings plugins搜chinese如下图搜索结果 选择第二个官方汉化插件安装即可
  • 构造函数的初始化列表

    构造函数初始化列表以一个冒号开始 接着是以逗号分隔的数据成员列表 每个数据成员后面跟一个放在括号中的初始化式 例如 include
  • 【科普】一分钟看懂WINDOWS系统、LINUX系统和苹果操作系统到底有什么区别?

    转自 首先 不管是WINDOWS操作系统 LINUX系统还是苹果操作系统 甚至包括操作系统的鼻祖UNIX操作系统 最早都是用C语言编写的 实际上UNIX操作系统和C语言都是由贝尔实验室的汤普森 Ken Thompson 和丹尼斯 里奇 De
  • RFC文档(中文翻译版本)

    RFC文档官方在线阅读地址 https tools ietf org rfc index 以下是部分中文翻译的文档连接 RFC文档目录 RFC1 主机软件 RFC2 主机软件 RFC3 文档规范 RFC4 网络时间表 RFC6 与 Bob
  • Jmeter导出测试报告

    不管是测接口还是性能 测试完毕之后我们总是希望有所产出 能看的更直观 Jmeter就提供了导出测试报告的功能 一起看看怎么玩 如果细心留意的话 会看到在启动jmeter时 dos窗口会有一行命令 实际上这个命令就阔以帮助我们导出测试报告 我
  • 强制Vue重新渲染组件的最佳方式(亲测完美解决问题)

    有时候 依赖 Vue 响应方式来更新数据是不够的 相反 我们需要手动重新渲染组件来更新数据 或者 我们可能只想抛开当前的DOM 重新开始 那么 如何让Vue以正确的方式重新呈现组件呢 强制 Vue 重新渲染组件的最佳方法是在组件上设置 ke
  • MySQL 使用两种方式清空表,删除表中的所有数据

    假设要删除book表中的所有数据 DELETE FROM book 或 TRUNCATE TABLE book 两者的区别在于 如果book表的主键Id设置为自增的整型 那么 第一次新建一条数据不指定Id Id自动赋值为1 如果使用Dele
  • 刷脸支付项目成本低是创业投资首选

    人工智能技术的改革 还可以说刷脸支付的应用开启了人工智能技术的改革 在以往的人工智能技术的应用而言还不是十分普及 而人工智能技术的在商业化的落地 对于全国店家而言还可以得到广泛的应用 随着各方从业人员的推广以及技术的不断更新 人工智能技术和
  • 打印杨辉三角

    要打印杨辉三角 我们首先要观察杨辉三角中数的规律 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 5 1 如图 我们可以把杨辉三角中前面的空格先省掉 观察数的规律 可以把这些数看做一个二维数组 1 二维数组第一列的
  • 一文了解 Redis

    Redis 简介 Redis Remote Dictionary Server 是一个开源的高性能键值对存储数据库 最初由 Salvatore Sanfilippo 开发 它在内存中存储数据 并提供了持久化功能 可以将数据保存到磁盘中 是一
  • 基于 树莓派4 + STM32H7 构建支持云端应用的嵌入式系统平台 【一】

    基于 树莓派4 STM32H7 构建支持云端应用的嵌入式系统平台 一 一 想法概述 1 想法由来 2 系统架构 3 系统选型 4 开发语言 5 涉及到的框架 6 开发工具 7 功能实现 二 环境搭建 1 MCU开发环境 2 树莓派开发环境
  • 下载试用华秋DFM,让鹏老师恰口饭!

    赚W嘛 就大大方方的 不寒碜 华秋DFM简介 华秋DMF是一个PCB文件分析工具 可以在生产前分析设计好的PCB文件中可能存在的生产风险 从而提高PCB生产及后期贴片 装配的良品率 华秋DMF还集成及PCB下单功能 每个账号没月可免费在华秋
  • VMware虚拟机 Centos7网络配置 ping:www.baidu.com:未知的名称或服务 ping不通

    代码操作 右击打开终端 cd etc sysconfig network scripts ll ll less 看到第一行 rw r r 1 root root 279 11月 8 01 35 ifcfg ens33 vim ifcfg e
  • 【论文阅读】Ultrafast Local Outlier Detection from a Data Stream with Stationary Region Skipping

    论文阅读 Ultrafast Local Outlier Detection from a Data Stream with Stationary Region Skipping 论文来源 SIGKDD 2020 原文地址 https dl
  • docker部署redis实例

    docker部署redis实例 前言 本文只适合二次创建redis实例 在 1 电脑已经有虚拟机 2 虚拟机之前已经配置好了docker 3 虚拟机docker之前已经拉取过redis镜像 pull 4 通过上面第3步的镜像成功跑起过red
  • visual studio code搭建opencv环境

    visual studio code搭建OpenCV环境 前言 资源下载 软件安装与配置环境变量 安装 配置环境变量 生成MakeFiles 编译opencv vscode配置 参考链接 前言 前段时间我想学习opencv 由于我一直都习惯