0.1opencv库VS环境配置

news2024/12/26 14:31:50

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路径。再次运行我们的测试程序:

在这里插入图片描述

运行成功。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/354584.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Docker入门教程

文章目录一、Docker概述1. 什么是容器技术&#xff1f;2. 什么是Docker3. 为什么要使用Docker4. Docker和虚拟机的对比5. Docker相关概念6. DockerHub7. Docker架构二、安装Docker1. 安装Docker2. 配置阿里云镜像加速三、Docker常用命令1. 帮助命令2. 镜像操作命令3. 容器操作命…

mysql 8.0 忘记root密码-linux

vim /etc/my.cnf 在[mysqld]最后加上如下语句&#xff1a;skip-grant-tables 并保存退出有的配置是分开的&#xff0c;/etc/my.cnf.d/mysql-server.cnf重启mysql服务 : service mysqld restart免密码登陆: mysql -u root -ppassword校验直接回车select host, user, authenticat…

C#:Krypton控件使用方法详解(第七讲) ——kryptonHeader

今天介绍的Krypton控件中的kryptonHeader&#xff0c;下面开始介绍这个控件的属性&#xff1a;控件的样子如上图所示&#xff0c;从上面控件外观来看&#xff0c;这个控件有三部分组成。第一部分是前面的图片&#xff0c;第二部分是kryptonHeader1文本&#xff0c;第三部分是控…

前端学习第一阶段-第7章 品优购电商项目

7-1 品优购项目介绍及准备工作 01-品优购项目导读 02-网站制作流程 03-品优购项目规划 04-品优购项目搭建 05-品优购项目-样式的模块化开发 06-品优购项目-favicon图标制作 07-品优购项目-TDK三大标签SEO优化 7-2 首页Header区域实现 08-品优购首页-快捷导航shortcut结构搭建 0…

MySQL(三):切分,主从复制,读写分离

文章目录一、切分水平切分垂直切分水平切分策略二、主从复制三、读写分离一、切分 水平切分 水平切分又称为sharding,它是将同一个表中的记录拆分到多个结构相同的表中。当一个表的数据不断增多的时候&#xff0c;sharding是必然的选择&#xff0c;它可以将数据分布到集群的不…

jmap监控工具

在一个JVM进程中会存在有多个对象实例,如果要想获取所有对象的信息,就可以通过JDK提供的jmap工具完成,另外使用该工具还可以直接获取到指定进程的堆内存使用信息,开发者可以通过jmap --help 命令查看该命令相关的参数。 1、查看JVM进程中的对象信息 导致JVM性能问题的核心…

力扣sql简单篇练习(十九)

力扣sql简单篇练习(十九) 1 查询结果的质量和占比 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 # 用count是不会统计为null的数据的 SELECT query_name,ROUND(AVG(rating/position),2) quality,ROUND(count(IF(rating<3,rating,null))/count(r…

九龙证券|欧美充电桩市场快速增长 国内“桩企”出海需求旺盛

海外充电桩毛利率水平高、需求增加速&#xff0c;“桩企”出海继续。 在阿里世界站上接连三年火爆的新能源出口行业&#xff0c;本年坚持高增加下&#xff0c;涌现出新商机——新能源车充电桩。阿里世界站最新跨境指数显现&#xff0c;曩昔一年新能源车充电桩的海外商机快速增加…

SpringBoot11:分布式Dubbo、Zookeeper

什么是分布式系统&#xff1f; 建立在网络之上的软件系统&#xff0c;是若干个独立的计算机的集合&#xff0c;但是对用户来说&#xff0c;就像单个系统一样。可以利用更多的机器&#xff0c;处理更多的数据 注意&#xff1a;只有当单个节点不够用的时候&#xff0c;才需要考…

杭州电子科技大学2023年MBA招生考试成绩查询和复查申请的通知

根据往年的情况&#xff0c;2023杭州电子大学MBA考试初试成绩可能将于2月21日公布&#xff0c;最早于20号出来&#xff0c;为了广大考生可以及时查询到自己的分数&#xff0c;杭州达立易考教育为大家汇总了信息。根据教育部和浙江省教育考试院关于硕士研究生招生考试工作的统一…

volatile 关键字的使用

写博客的目的第一是做笔记&#xff0c;第二是在错误的基础上不断刷新认知&#xff0c;这两天会写三篇关于嵌入式容易混淆的知识点&#xff0c;有错误欢迎拍砖&#xff01; 1、volatile关键字的使用 关于volatile 关键字&#xff0c;如果你的理解仅仅是讲“是从内存直接取数据…

CoreDNS

目录 文章目录目录本节实战前言1、环境变量2、DNS1.DNS 解析过程2.根域名服务器3.顶级域名服务器4.权威性域名服务器5.dig 域名3、CoreDNS1.CoreDNS 扩展配置&#xff08;1&#xff09;开开启日志服务&#xff08;2&#xff09;特定域名使用自定义 DNS 服务器&#xff08;3&…

K8s集群部署(二进制安装部署详细手册)

一、简介 K8s部署主要有两种方式&#xff1a;1、Kubeadm Kubeadm是一个K8s部署工具&#xff0c;提供kubeadm init和kubeadm join&#xff0c;用于快速部署Kubernetes集群。 2、二进制 从github下载发行版的二进制包&#xff0c;手动部署每个组件&#xff0c;组成Kubernetes集群…

SSM项目搭建保姆级教程

文章目录1、什么是SSM框架1.1、持久层1.2、业务层1.3、表现层1.4、View层1.5、SpringMVC执行流程1.6、MyBatis2、SSM实战搭建2.1、创建工程2.2、添加依赖2.3、配置spring.xml文件2.4、配置web.xml文件2.5、log4j.properties2.6、准备表2.7、实体类2.8、mapper2.9、service2.10、…

GuLi商城-SpringCloud-OpenFeign测试远程调用

1. Feign 简介 Feign 是一个声明式的 HTTP 客户端&#xff0c;它的目的就是让远程调用更加简单。Feign 提供了HTTP请 求的模板&#xff0c;通过编写简单的接口和插入注解&#xff0c;就可以定义好 HTTP 请求的参数、格式、地址等信 息。Feign 整合了 Ribbon&#xff08;负载…

操作系统 二(进程管理)

一、进程的定义及特征进程的定义由程序、数据、进程控制块三部分组成为了使程序可以并发执行&#xff0c;且可以对并发执行的程序加以描述和控制。不同角度的定义&#xff1a;进程是程序的一次执行&#xff1b;进程是一个程序及其数据在处理机上顺序执行时所发生的活动&#xf…

IDEA Maven Helper插件(详细使用教程)

一、引言 在写Java代码的时候&#xff0c;我们可能会出现Jar包的冲突的问题&#xff0c;这时候就需要我们去解决依赖冲突了&#xff0c;而解决依赖冲突就需要先找到是那些依赖发生了冲突&#xff0c;当项目比较小的时候&#xff0c;还比较依靠IEDA的【Diagrams】查看依赖关系&…

dom基本操作

1、style修改样式 基本语法&#xff1a; 元素.style.样式’值‘ 注意: 1.修改样式通过style属性引出 2.如果属性有-连接符&#xff0c;需要转换为小驼峰命名法 3.赋值的时候&#xff0c;需要的时候不要忘记加css单位 4.后面的值必须是字符串 <div></div> // 1、…

《Hadoop篇》------HDFS与MapReduce

目录 一、HDFS角色职责总结 二、CheckPoint机制 三、Mapreduce序列化 四、Mapper 4.1、官方介绍 4.2、Split计算 4.3、Split和block对应关系 4.4、启发式算法 五、MapTask整体的流程 六、压缩算法 6.1、压缩算法适用场景 6.2、压缩算法选择 6.2.1、Gzip压缩 6.2…

独家 | ChatGPT提高你日常工作的五个特点以及如何使用它来提高代码质量

翻译&#xff1a;陈超 校对&#xff1a;赵茹萱本文约3200字&#xff0c;建议阅读8分钟 本文介绍了ChatGPT提高日常工作的五个特点。ChatGPT已经完全改变了代码开发模式。然而&#xff0c;大多数软件开发者和数据专家们仍然不使用ChatGPT来完善——并简化他们的工作。这就是我们…