当前位置: 首页 > 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 多入口文件:(在输出…...

避开这些坑!个人免签支付平台实战对比:蓝鲸、V云、云免签到底怎么选?

个人免签支付平台深度评测&#xff1a;如何根据业务需求选择最优方案&#xff1f; 对于独立开发者和小型站长来说&#xff0c;支付接入一直是令人头疼的问题。没有企业资质无法直接对接官方支付渠道&#xff0c;而传统的第三方支付平台又往往门槛高、手续费昂贵。近年来兴起的个…...

别光看论文!手把手带你复现CVPR 2025扩散模型加速新星:TinyFusion与DiG的代码实战

别光看论文&#xff01;手把手带你复现CVPR 2025扩散模型加速新星&#xff1a;TinyFusion与DiG的代码实战 如果你已经厌倦了在arXiv上收藏一堆永远打不开第二次的论文链接&#xff0c;或是被那些充满数学符号却缺少可运行代码的"理论创新"搞得头大&#xff0c;那么这…...

STM32F407+UCOSIII实战:手把手教你从零搭建一个能走会避障的六足机器人(附完整源码/PCB/Solidworks图纸)

STM32F407UCOSIII实战&#xff1a;从零构建智能六足机器人全流程解析 六足机器人作为仿生机器人中的经典形态&#xff0c;其稳定性和地形适应能力远超轮式与四足结构。本文将带你完整实现一个基于STM32F407和UCOSIII的智能六足机器人&#xff0c;涵盖机械设计、电路开发、运动…...

CDAN不只是论文里的公式:深入浅出图解‘条件对抗’如何让领域自适应更精准

CDAN不只是论文里的公式&#xff1a;深入浅出图解‘条件对抗’如何让领域自适应更精准 想象你是一位冰淇淋品鉴师&#xff0c;需要将一家老牌店铺&#xff08;源域&#xff09;的配方迁移到新店铺&#xff08;目标域&#xff09;。传统方法粗暴混合所有原料&#xff0c;导致巧…...

VibeVoice多音色展示:从儿童到老人的自然过渡效果

VibeVoice多音色展示&#xff1a;从儿童到老人的自然过渡效果 1. 引言 你有没有想过&#xff0c;一段文字可以同时用儿童的天真嗓音、青年的清澈声线、中年的沉稳语调&#xff0c;以及老者的沧桑音色来演绎&#xff1f;这不是科幻电影中的场景&#xff0c;而是VibeVoice带来的…...

QtPlaskin实战指南:从HDF5数据解析到等离子体动力学可视化

1. QtPlaskin与等离子体动力学分析入门 第一次接触QtPlaskin时&#xff0c;我被它处理复杂等离子体数据的能力惊艳到了。这个基于Python和Qt开发的图形工具&#xff0c;专门用于解析ZDPlasKin等等离子体动力学程序生成的HDF5格式数据。想象一下&#xff0c;你刚完成了一个长达…...

Fish Speech-1.5语音合成企业标准:WAV采样率/比特率/声道数配置指南

Fish Speech-1.5语音合成企业标准&#xff1a;WAV采样率/比特率/声道数配置指南 如何在企业级应用中配置Fish Speech-1.5的音频输出参数&#xff0c;获得最佳语音合成效果 语音合成技术在企业应用中越来越重要&#xff0c;从智能客服到有声内容制作&#xff0c;都需要高质量的语…...

Qwen2.5-32B-Instruct开发指南:vscode安装与插件配置

Qwen2.5-32B-Instruct开发指南&#xff1a;vscode安装与插件配置 1. 引言 如果你正准备开始使用Qwen2.5-32B-Instruct这个强大的AI模型进行开发&#xff0c;那么一个高效的编程环境就是你的第一站。作为阿里云推出的320亿参数指令微调模型&#xff0c;Qwen2.5-32B-Instruct在…...

Eigen矩阵打印踩坑记:从乱码到优雅输出的3个关键技巧与一个隐藏Bug

Eigen矩阵打印踩坑记&#xff1a;从乱码到优雅输出的3个关键技巧与一个隐藏Bug 第一次在ROS项目里调试Eigen矩阵时&#xff0c;我盯着终端里歪歪扭扭的数字对齐和突然冒出的科学计数法&#xff0c;花了整整两小时才意识到这不是算法问题&#xff0c;而是输出格式在作祟。Eigen作…...

比迪丽模型在数据库课程设计中的应用:ER图可视化增强

比迪丽模型在数据库课程设计中的应用&#xff1a;ER图可视化增强 1. 引言 数据库课程设计是计算机专业学生的必修实践环节&#xff0c;其中ER图&#xff08;实体-关系图&#xff09;的设计与呈现是核心难点。传统工具绘制的ER图往往显得枯燥抽象&#xff0c;学生难以直观理解…...