当前位置: 首页 > news >正文

0.1opencv库VS环境配置

opencv环境配置

感谢大家学习这门教程。本系列文章首发于公众号【周旋机器视觉】。

这个这门课程的第一篇文章,主要是opencv环境配置。

本教程的环境为

  • Visual Studio 2019
  • CMake 3.22.3
  • opencv 4.6.0
  • windows 10

1、opencv的源码下载与安装

直接访问opencv官网:https://opencv.org/
在这里插入图片描述
点击release进入进入发布页面,选择4.6.0版本:

在这里插入图片描述

  • Docs:opencv-4.6.0官方文档
  • Sources:opencv源码
  • GitHub:官方github网址
  • Windows:Windows平台下的安装包
  • Release Notes:4.6.0版本发布说明

这几个按钮都非常明确,本教程我们需要用到的就是Docs、Windows这两项。

1.1 opencv官方文档

在这里插入图片描述

本课程主要看的就只有文档首页导航页的前两项,在我们课程开始会先带大家学习这两部分的官方文档部分。

1.2opencv环境搭建

在开始直接编译源码之前,我们先基于opencv的安装包来给VS配置opencv环境。点击上方页面中的windows,会直接进入下载页面下载一个exe

在这里插入图片描述

这exe其实就是一个解压缩执行程序,下载完成后直接执行,选择一个路径,则会将构建好的opencv以及源码解压缩到该目录:

在这里插入图片描述

其中sources就是opencv的源码,build就是官方给的构建好的opencv库。

我们可以自己手动构建opencv的源码,然后编译源码工程来生成opencv动态库和静态库,生成的产物就是build;也可以直接在我们项目中使用官方构建好的opencv库。在链接opencv库这个步骤上两个是没有差异的,无非就是一个官方给的dll,一个是自己手动编译的dll。

但我们自己手动构建opencv源码,可以方便的查看阅读opencv的源码工程,可以在不同文件、不同函数实现之间任意切换,编译生的debug版本的dll,还可以调试。

1)配置系统环境变量

在这里插入图片描述

进入高级系统设置->环境变量->用户变量(或系统变量)->添加opencv的库路径。

2)VS链接opencv库(手动配置法)

在这里插入图片描述

直接创建一个演示用的VS控制台应用程序。

在这里插入图片描述

要想链接opencv库,需要对项目的属性进行配置。进行配置的本质其实就是VS把一些可选项给你通过GUI的方式展示了出来,并赋予了默认值,你来修改一些选项来完成你自己项目工程的编译、链接、生成等过程的配置。所有的工作都由VS来帮你完成了。

而这些工作我们同样可以通过cmake来完成,后面我们会介绍如何使用cmake来管理你的项目并链接opencv库。

我们打开项目的属性进行如下配置:

在这里插入图片描述

配置库的include包含目录,路径见截图。这一步是将opencv的include路径配置进你项目的包含路径内,opencv的include文件夹内都是.hpp头文件。

完成这一步,你其实就可以在你的项目中使用

#include "opencv2/opencv.hpp"

来包含opencv的头文件,并编写opencv的代码了:

#include <iostream>
#include "opencv2/opencv.hpp"int main()
{cv::Mat srcImage = cv::imread("Laner.png");if (srcImage.empty()){std::cout << "image read Error!\n";return -1;}cv::imshow("src", srcImage);cv::waitKey();return 0;
}

这代表这你当前可以编译通过了,但是现在你并不能完成链接操作,执行该项目会报错,这些错误就是链接错误,无法链接到opencv库:

在这里插入图片描述

所以我们还需要链接opencv的静态库:

在这里插入图片描述

上图配置了lib静态库的路径。然后还需配置lib静态库名称,来告诉vs链接该路径下的哪个lib库,让我们先看一下该路径下都有什么:

在这里插入图片描述

可以看到一共只有两个lib库,其余的为cmake文件,后面我们使用cmake来管理项目并链接opencv库的时候会讲到。

两个lib库,以d结尾的为debug版本,没有d的opencv_world460.lib为release版本的静态库,因为我们前面截图的配置选项一直都是release x64,因此我们选择opencv_world460.lib库:

在这里插入图片描述

当你配置debug x64属性的时候,链接opencv_world460d.lib即可。

如果你按照我前面的步骤:

  1. 下载opencv库
  2. 配置库的系统路径
  3. 添加opencv库的include头文件包含路径
  4. 添加opencv静态链接库完成链接

那你运行你的程序应该是可以成功的。

不过在我电脑上却没有运行成功,如下图,因为我并没有配置库的系统路径。

在这里插入图片描述

这就可以凸显一个东西:opencv的动态链接库。

opencv为动态链接库,虽然我们通过头文件包含目录以及lib静态库完成了编译、链接的操作,但当我们程序运行时,程序还是通过动态库来调用opencv的,那我们配置系统环境变量,其实就是把opencv的bin目录,也就是opencv的动态库路径打入了环境变量:

在这里插入图片描述

当我们的程序运行时,它会在可执行文件目录同级目录内查找需要的动态库,如果没有找到,则去系统环境变量里的路径内查找动态库,如果还没有找到,就会报如上找不到opencv_world460.dll动态库的弹窗错误。

所以解决办法也很简单,有两种:

  1. 配置opencv的动态库系统环境变量
  2. 或者是将动态库拷贝到可执行文件的目录

在这里插入图片描述

我们采用方法2,将dll拷贝到exe路径。再次运行我们的测试程序:

在这里插入图片描述

运行成功。

相关文章:

0.1opencv库VS环境配置

opencv环境配置 感谢大家学习这门教程。本系列文章首发于公众号【周旋机器视觉】。 这个这门课程的第一篇文章&#xff0c;主要是opencv环境配置。 本教程的环境为 Visual Studio 2019CMake 3.22.3opencv 4.6.0windows 10 1、opencv的源码下载与安装 直接访问opencv官网&…...

第五十七章 树状数组(二)

第五十七章 树状数组&#xff08;二&#xff09;一、差分的缺陷二、树状数组与差分三、例题题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示样例 1 解释&#xff1a;数据规模与约定代码一、差分的缺陷 差分的作用是能够在O(1)的时间内给一段区间加上相同的数字&am…...

比特币的网络

比特币的网络 1. DNS-seed 在比特币网络中,初始节点发现一共有两种方式。 第一种叫做 DNS-seed,又称 DNS 种子节点,DNS 就是中心化域名查询服务,比特币的 社区维护者会维护一些域名。 比如 seed.bitcoin.sipa.be 这个域名就是由比特币的核心开发者 Sipa 维护的,如果我…...

ChatGPT的模型介绍及GO语言实现API

ChatGPT除了大家熟悉的GPT3之外&#xff0c;还有其他辅助模型&#xff0c;比如处理代码的以及有害信息过滤的系统。总的来说是下面三个组成&#xff1a;GPT-3&#xff1a;一组能够理解和生成自然语言的模型CodexLimited beta&#xff1a;一组可以理解和生成代码的模型&#xff…...

Tile防丢器引入全新防盗模式,苹果Find My功能拓展到大众消费电子

Tile 宣布引入全新的防盗模式&#xff0c;Tile 配件启用之后&#xff0c;反跟踪扫描和安全功能就无法检测到该配件。Tile 为了遏制其物品追踪产品用于追踪某人&#xff0c;此前推出了 Scan and Secure 功能。iPhone 和安卓用户可以通过该功能扫描附近的 Tile 设备&#xff0c;以…...

物联网中RocketMQ的使用

物联网中RocketMQ的使用 1. 背景 随着物联网行业的发展、智能设备数量越来越多&#xff0c;很多常见的智能设备都进入了千家万户&#xff1b;随着设备数量的增加&#xff0c;也对后台系统的性能提出新的挑战。 在日常中&#xff0c;存在一些特定的场景&#xff0c;属于高并发请…...

用Three.js搭建的一个艺术场景

本文翻译自于Medium&#xff0c;原作者用 Three.js 创建了一个“Synthwave 场景”&#xff0c;效果还不错&#xff0c;在此加上自己的理解&#xff0c;记录一下。在线Demo. 地形构建 作者想要搭建一个中间平坦、两侧有凹凸山脉效果并且能够一直绵延不断的地形&#xff0c;接下…...

算法导论【字符串匹配】—朴素算法、Rabin-Karp、有限自动机、KMP

算法导论【字符串匹配】—朴素算法、Rabin Karp、有限自动机、KMP朴素字符串匹配算法Rabin-Karp算法有限自动机KMP算法朴素字符串匹配算法 预处理时间&#xff1a;0匹配时间&#xff1a;O((n-m1)m) Rabin-Karp算法 预处理时间&#xff1a;Θ(m)&#xff0c;需要预先算出匹…...

如何在 Python 中验证用户输入

要验证用户输入&#xff1a; 使用 while 循环进行迭代&#xff0c;直到提供的输入值有效。检查输入值在每次迭代中是否有效。如果该值有效&#xff0c;则跳出 while 循环。 # ✅ 验证用户输入的是否是整数num 0while True:try:num int(input("Enter an integer 1-10: …...

JVM详解——类的加载

文章目录类的加载1、Java程序如何运行2、Java字节码文件3、类加载4、类加载的过程5、类加载器6、类的加载方式7、类的加载机制8、双亲委派机制9、破坏双亲委派机制类的加载 1、Java程序如何运行 首先通过Javac命令将.java文件编译生成.class字节码文件。 Javac是Java编译命令&a…...

Ubuntu最新版本(Ubuntu22.04LTS)安装nfs服务器及使用教程

目录 一、概述 二、在Ubuntu搭建nfs服务器  &#x1f449;2.1 安装nfs服务器  &#x1f449;2.2 创建nfs服务器共享目录  &#x1f449;2.3 修改nfs服务器配置文件  &#x1f449;2.4 重启nfs服务器 三、客户端访问nfs服务器共享目录  &#x1f388;3.1 在nfs客户端挂载服…...

Python-第九天 Python异常、模块与包

Python-第九天 Python异常、模块与包一、了解异常1. 什么是异常&#xff1a;2. bug是什么意思&#xff1a;二、异常的捕获方法1. 为什么要捕获异常&#xff1f;2. 捕获异常的语法3. 如何捕获所有异常&#xff1f;三、异常的传递性1.异常是具有传递性的四、Python模块1. 什么是模…...

博彩公司 BetMGM 发生数据泄露,“赌徒”面临网络风险

Bleeping Computer 网站披露&#xff0c;著名体育博彩公司 BetMGM 发生一起数据泄露事件&#xff0c;一名威胁攻击者成功窃取其大量用户个人信息。 据悉&#xff0c;BetMGM 数据泄漏事件中&#xff0c;攻击者盗取了包括用户姓名、联系信息&#xff08;如邮政地址、电子邮件地址…...

初探Mysql反向读取文件

前言 Mysql反向读取文件感觉蛮有意思的&#xff0c;进行了解过后&#xff0c;简单总结如下&#xff0c;希望能对在学习Mysql反向读取文件的师傅有些许帮助。 前置知识 在Mysql中存在这样一条语句 LOAD DATA INFILE它的作用是读取某个文件中的内容并放置到要求的表中&#x…...

地图坐标系大全:常用地图坐标系详解与转换指南

介绍地图坐标系的基本概念和原理地图坐标系是用于描述地图上位置的数学模型。它可以用来表示地球表面上的任意一个点&#xff0c;使得这个点的位置可以在地图上精确定位。不同的地图坐标系采用不同的基准面和投影方式&#xff0c;因此会有不同的坐标系参数&#xff0c;不同的坐…...

使用 URLSearchParams 解析和管理URL query参数

介绍 首先 URLSearchParams是一个构造函数&#xff0c;会生成一个URLSearchParams对象&#xff0c;参数类型&#xff1a; 不传 &#xff5c; string &#xff5c; object &#xff5c; URLSearchParams&#xff0c; 并且遇到特殊字符它会自动帮我们encode 和 decode const ur…...

一台电脑安装26个操作系统(windows,macos,linux,chromeOS,Android,静待HarmonyOS)

首先看看安装了哪些操作系统1-4: windows系统 四个5.Ubuntu6.deepin7.UOS家庭版8.fydeOS9.macOS10.银河麒麟11.红旗OS12.openSUSE Leap13.openAnolis14.openEuler(未安装桌面UI)15.中标麒麟&#xff08;NeoKylin&#xff09;16.centos17.debian Edu18.fedora19.oraclelinux(特别…...

Python配置文件管理之ini和yaml文件读取

1. 引言 当我们设计软件时&#xff0c;我们通常会花费大量精力来编写高质量的代码。但这往往还不够&#xff0c;一个好的软件还应该考虑其整个系统&#xff0c;如测试、部署、网络等。其中最重要的一个方面是配置管理。 良好的配置管理应允许在任何环境中执行软件而不更改代码…...

实战一(下):如何利用基于充血模型的DDD开发一个虚拟钱包系统?

上一节课,我们做了一些理论知识的铺垫性讲解,讲到了两种开发模式,基于贫血模型的传统开发模式,以及基于充血模型的DDD开发模式。今天&#xff0c;我们正式进入实战环节&#xff0c;看如何分别用这两种开发模式&#xff0c;设计实现一个钱包系统。话不多说&#xff0c;让我们正式…...

webpack当中的代码分割详解

A.代码分割方法一&#xff1a;将原来的单入口文件改为多入口文件 将不同的文件例如js代码文件分为入口文件和测试文件&#xff0c;这个时候打包出来的代码就会根据不同的文件单独打包成属于他们自己的文件 例如以下为单入口文件: entry: ./src/js/index.js 多入口文件:(在输出…...

【SSM】Spring对IoC的实现方式DI详讲

控制反转的一种实现方式——依赖注入一、IoC 控制反转&#xff08;Overview&#xff09;依赖注入&#xff08;DI&#xff09;- Overview利用 IoC&#xff08;控制反转&#xff09;这种思想有什么好处呢&#xff1f;二、依赖注入的方式setter 方式&#xff08;xml配置中的proper…...

【QT 5 相关实验-示波器-学习笔记-示波器组件练习与使用总结】

【QT 5 相关实验-示波器-学习笔记-示波器组件练习与使用总结】1、概述2、实验环境3、参考资料-致谢4、自我提升实验效果视频演示5、代码练习-学习后拆解-实验步骤&#xff08;1&#xff09;头文件部分-"mwaveview.h"&#xff08;2&#xff09;cpp文件部分-"mwav…...

二维数组中的查找(两种解法,各有千秋)

凡事都有可能&#xff0c;永远别说永远。——《放牛班的春天》今天一题为再一个行列都有序的二维数组中寻找一个目标值&#xff0c;我们第一时间想到的可能是很暴力的解法&#xff0c;例如从头到尾进行遍历&#xff0c;这样能做出来&#xff0c;但是借用武忠祥老师的一句话&…...

quartz使用及原理解析

quartz简介 ​ Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目&#xff0c;完全由Java开发&#xff0c;可以用来执行定时任务&#xff0c;类似于java.util.Timer。但是相较于Timer&#xff0c; Quartz增加了很多功能&#xff1a; 持久性作业 - 就是保持调度…...

Datawhale组队学习:大数据 D2——分布式文件系统(HDFS)

妙趣横生大数据 Day2三、Hadoop 分布式文件系统(HDFS)1. 分布式文件系统2. HDFS 简介3. HDFS 体系结构4. HDFS存储原理数据冗余存储数据存储策略数据错误与恢复5. HDFS数据读写过程读写过程HDFS故障类型和其检测方法HDFS编程实验1. 本地和集群文件间操作2. 基本文件操作3. Hado…...

CCIE重认证-300-401-拖图题全

拖图 拖图题 编程 snippet&#xff1b;192.168.5.0&#xff0c;mask 255.255.255.0&#xff1b;number是192.168.5.0&#xff1b;mask是255.255.255.0 snippets&#xff1b;edit-config对config&#xff0c;loopback对name 100&#xff0c;address对primary&#xff0c;mask…...

如何动态的创建类?type的其他用法?什么是元类,如何自定义元类?

1、python中一切都是对象&#xff0c;类也不例外&#xff0c;type是object的子类&#xff0c;是创建类的类。 如何动态的创建一个类&#xff1f; 用脚丫子创建 用脑子创建 不会 不知道什么事动态类 大家可能会有一堆的疑惑&#xff0c;是的我也是有很多疑惑那让我们一起来探个…...

XCP实战系列介绍15-XCP故障排查指导

本文框架 1.概述2. 通过调试器排查2.1 打开Det功能2.2 如何确定Det ErrorCode3. 通过XCP应答报文排查3.1 FE报文组成及故障码对应关系3.2 举个例子1.概述 前面几篇文章我们介绍了基于Davinci开发工具的XCP配置指导,配好了,代码也生成了,但是程序一定能正常跑起来吗?就算软…...

吉林大学软件需求分析与规范(Software Requirements Analysis Specification)

chapter0课程简介&#xff1a;◼ 软件工程专业核心课程之一◼ 软件工程课程体系最前端课程◼ 主要内容&#xff1a;需求的基本概念&#xff0c;需求的分类&#xff0c;需求工程的基本过程&#xff0c;需求获取的方法、步骤、技巧&#xff0c;需求分析和建模技术&#xff0c;需求…...

PyTorch - Conv2d 和 MaxPool2d

文章目录Conv2d计算Conv2d 函数解析代码示例MaxPool2d计算函数说明卷积过程动画Transposed convolution animationsTransposed convolution animations参考视频&#xff1a;土堆说 卷积计算 https://www.bilibili.com/video/BV1hE411t7RN 关于 torch.nn 和 torch.nn.function t…...

怎么做网站下单/深圳百度推广seo公司

IE的时候图片在右边显示&#xff0c;而FF的时候图片在文字下面显示&#xff0c;现在如何做&#xff0c;才能让2个浏览器下都文字下方显示啊&#xff1f;QQ5650387 <html> <head><meta http-equiv"Content-Type" content"text/html; charsetut…...

毕设做购物网站容易吗/seo一键优化

泛型&#xff1a;为了让集合能够记住集合内元素各个类型&#xff0c;且能够达到只要编译时不出现问题&#xff0c;运行时就不会出现类型异常的解决方案。 泛型又从称为参数化类型&#xff0c;是一种编译时类型安全检测机制&#xff0c;类型参数的魅力在于使得程序具有可读性和…...

花木网站模版/永久免费个人网站申请注册

1 FFmpeg录屏以及录音的命令 最近需要用到FFmpeg录制声卡中的声音&#xff0c;在cmd.exe的命令行中使用正常的录音命令&#xff1a; ffmpeg -f dshow -i audio"virtual-audio-capturer" -acodec aac f:\temp.aac是可以实现录制的 然后按照官方的按Q键暂停录制 也…...

大会的网站架构/如何在网上做销售推广

1&#xff1a;大数据产业生产流程从数据的生命周期的传导和演变上可以分为这样几个部分&#xff1a;数据收集、数据存储、数据建模、数据分析、数据变现。 3&#xff1a;大数据人才的一将难求不奇怪&#xff1a;&#xff08;1&#xff09;大数据产业发展迅速。&#xff08;2&am…...

哪些网站用黑体做的/云搜索app下载

&#x1f320; 『精品学习专栏导航帖』 &#x1f433;最适合入门的100个深度学习实战项目&#x1f433;&#x1f419;【PyTorch深度学习项目实战100例目录】项目详解 数据集 完整源码&#x1f419;&#x1f436;【机器学习入门项目10例目录】项目详解 数据集 完整源码&…...

网站内部seo/关键词排名点击软件怎样

废话不多说&#xff0c;直接进入话题 Linux上Cacti的安装 1.环境需求 cacti需要 lamp 或lnmp环境。 2.cacti前置需求软件 安装Cacti前&#xff0c;需要php-pdo lm_sensors net-snmp php-snmp net-snmp-utils perl-Net-Daemon perl-PlRPC perl-DBI rrdtool perl-rrdtool p…...