windows下安装Visual Studio + CMake+OpenCV + OpenCV contrib+TensorRT

目录

1 安装visual studio

2 安装CMake

3 OpenCV源码安装

3.1 OpenCV源码下载

3.2 OpenCV contrib源码下载

3.3 安装OpenCV

3.4 安装OpenCV-crontrib

3.5 VS生成代码

4 环境配置

5 TensorRT安装

5.1 TensorRT安装

5.2 Python下安装TensorRT库


最近在研究windows系统上部署安装目标检测算法,需要用到OpenCV软件,因为OpenCV可能是目前使用最广泛的开源图像处理工具了,尤其是在科研领域。于是,本篇博客主要详细记录一下如何在Windows 操作系统下,搭建Visual Studio 2022+OpenCV4.5.5+OpenCV contrib4.5.5的运行环境。

1 安装visual studio

安装Visual Studio比较简单,首先去Visual Studio官网下载安装包

下载 Visual Studio Tools - 免费安装 Windows、Mac、Linux

下载Community版本就可以了,其功能已经够用了。

下载结束后,我们双击下载的安装包,开始安装

然后稍微等待即可

安装完成后会自动弹出以下窗口,根据你要使用Visual Studio所做的事情选择不同的功能集和工作负载,同时选择安装路径(建议使用默认安装路径)。在窗口的上方还有单个组件、语言包、安装位置这些选项,可以不用管,均为默认值,最后点击安装

接着慢慢等待即可,此过程相对比较慢,会下载一些依赖包

 安装完毕后,重启电脑就可以了,到此就已经成功安装Visual Studio 2022软件了。

2 安装CMake

CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件。只是CMake的组态档取名为CMakeLists.txt。Cmake并不直接建构出最终的软件,而是产生标准的建构档(如Unix的Makefile或Windows Visual C++的projects/workspaces),然后再依一般的建构方式使用。

首选下载CMake软件安装包,地址如下

Download | CMakehttps://cmake.org/download/我这里下载的是cmake-3.25.2-windows-x86_64.zip,(PS: 根据个人电脑windows系统位数下载对应的版本)

 双击打开下载的文件,点击“next”

勾选接受后点击“next”

添加环境变量和快捷键,看下图描述,然后点击“next”

更改安装位置(可以不更改,默认即可),然后点击“next”

点击“Install”等待安装,后出现右图所示,点击“Finish”安装结束。

测试是否安装成功,打开终端(win+R快捷键然后输入cmd回车),输入 cmake --version后,出现下载的版本号即代表安装成功

3 OpenCV源码安装

3.1 OpenCV源码下载

首先需要去OpenCV的官网下载源码,本教程下载的是OpenCV-4.5.5版本的源码

下载之后解压到特定文件夹,我解压到了D:\soft\opencv\opencv-4.5.5

3.2 OpenCV contrib源码下载

之所以要下载OpenCV contrib源码,是因为自从OpenCV 3.0之后,很多经典的算法,比如sift和surf特征点检测算法,由于专利原因,已经不包含在OpenCV的源码当中了,需要下载OpenCV contrib包才能继续使用。于是OpenCV contrib的官网下载源码安装包

GitHub - opencv/opencv_contrib: Repository for OpenCV's extra modulesRepository for OpenCV's extra modules. Contribute to opencv/opencv_contrib development by creating an account on GitHub.https://github.com/opencv/opencv_contribOpenCV contrib的版本记得要和OpenCV版本符合(例如下图我们选择的是4.5.5版本),还是要下载源码。

下载完解压,本文的路径为D:\soft\opencv\opencv_contrib-4.5.5

3.3 安装OpenCV

在安装CMake软件之后,就可以安装OpenCV源码了,具体步骤如下:

1 首先按下图操作:

2 弹窗出来的配置,按照自己的开发环境配置即可(本文的环境是VS 2022,平台是X64平台),然后点击"Finish"即可:

3 cmake的窗口开始打印信息

4 打印出来的信息中如果出现python、matlab相关的报错,例如下图,直接pass。(Python……ptsd,想到python就ptsd……想起某人爱用python造轮子……)

但是在编译过程中正常都会出现下载不成功的现象,这一步很多博客都没有写清楚如何排查,导致很多新手在之后VisualStudio阶段导包的时候出错。上一步完成之后,大部分情况下会报错。不出意外会看到如下的报错信息。

仔细阅读之后,我们应该查看一下CMakeDownloadLog.txt。使用Notepad++或者其他软件打开CMakeDownloadLog.tx

通过查看CMakeDownloadLog.txt文件可以看出,是由于Cmake去下载相关的包没有下载下来。所以根据红框处的信息我们需要自行下载,方法:将链接输入到浏览器,然后就会自动下载。一些链接输入到浏览器之后,显示的是文本,需要另存为文本到本地,千万不要复制!!!

下载之后将这些包拷贝到.cache文件夹下,并且需要更改包的名字(cmake下载包之后将校验的hash码重命名到了包中),下图以ippcv包为例:

下载的包原名为:ippicv_2020_win_intel64_20191018_general.zip         

复制到CmakeDownloadLog.txt中的.cache文件夹下,并改名为:

879741a7946b814455eee6c6ffde2984-ippicv_2020_win_intel64_20191018_general.zip

根据CMakeDonloadLog.txt文件中的提示信息,将所有下载失败的安装包都下载下来,复制到对应的文件夹中,然后重新点击configure

此时可以发现,不再有报错信息了, 同时也可以查看CmakeDownLoadLog.txt,已经不报错了:

3.4 安装OpenCV-crontrib

在cmake的OPENCV_EXTRA_MODULES_PATH之中输入之前下载的OpenCV-contrib的路径,精确到modules,OPENCV_ENABLE_NONFREE一定要勾选上!

再次configure,不出意外的话,又看到一大堆报错信息,同样是由于有些安装包没有下载下来,再次根据CMakeDownloadLog.txt文件中的提示信息,将没有下载成功的安装包下载下来,并复制到对应的文件夹中,再次点击configure即可。

3.5 VS生成代码

找到build之后的OpenCV.sln文件,用visual studio2022打开。

右击models下面的opencv_world,点击属性,如下图所示

对链接器中的启用增量链接进行修改,选择

对CMakeTargets文件夹下的Install进行重新生成即可,如下图。这个时候要等上一段时间,可能是半个小时,也可能是好几个小时,主要看电脑性能。跑完之后出现如下错误不要慌,这个是不耽误使用的,这个报错是python导致的。

以上咱们的opencv就算是编译完成了。跑完Debug版之后建议也去跑个Release,这样两个环境下就都可以使用了。

4 环境配置

  • 先配置系统环境变量,Windows控制台搜索即可查询到。

把之前install产出的bin的包的路径填进去,然后重启电脑才会生效。 

  • 然后创建一个空的"控制台应用"项目,就叫OpenCV-test

  • 右键项目,更改属性。编辑VC++目录下的包含目录(其实就是英文版本的include path) ​​​​​,然后把install之后的include文件夹路径添加上去。注意,是install之后的include路径,不要填错成了其他的include路径

  • 然后我们编辑库目录(其实就是英文版的lib path),把install之后的lib目录输入进去(再次强调是install之后的lib目录
  •  链接器->附加依赖项->编辑,输入所有的xxxxx/install\x64\vc16\lib中 所有xxxd.lib文件名字

为了验证我们安装OpenCV的效果,我们需要使用测试案例进行测试,输入以下代码进行测试,可以正常显示图片,则说明OpenCV安装成功。

// OpenCV-test.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
 
#include <iostream>
#include <opencv2/opencv.hpp>
 
int main()
{
    cv::Mat src = cv::imread("E:\\test.jpg");//图片路径
    if (src.empty())
    {
        std::cout << "pic is empty!\n";
        return -1;
    }
    cv::imshow("show", src);
    cv::waitKey(0);
    std::cout << "Hello World!\n";
}

5 TensorRT安装

首先需要在电脑上安装CUDA和cuDNN,这两个软件的安装教程可以参考其它博客Cuda和cuDNN安装教程(超级详细)_cuda安装_jhsignal的博客-CSDN博客

5.1 TensorRT安装

通过上面博主的教程大家应该安装好了CUDA和cuDNN,下面根据自己的CUDA版本号来找对应的TensorRT的安装包
TensorRT下载链接 Log in | NVIDIA Developer
我电脑上的cuda版本是11.5那么我下载的则是win系统下的TensorRT 8.5 GA,如下图

下载完成后,将该TensorRT文件解压后,如下图所示

然后需要将TensorRT文件中的文件移动到CUDA安装文件夹中,如下:
将 TensorRT-8.5.1.7\include中头文件 copy 到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.5\include
将TensorRT-8.5.1.7\lib 中所有lib文件 copy 到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.5\lib\x64
将TensorRT-8.5.1.7\lib 中所有dll文件copy 到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.5\bin

5.2 Python下安装TensorRT库

找到刚刚解压的TensorRT文件夹,里面有一个python文件夹,这里面含有不同版本python对应的TensorRT安装

在python环境中,将目录切换到刚刚解压的TensorRT文件夹,输入pip install tensorrt-8.5.1.7-cp39-none-win_amd64.whl,进行安装即可,根据自己的python版本来定。然后在python下导入tensorrt,看看是否可以正常导入并输出版本号,如下图所示,说明安装成功。

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unity渲染工程收集

NPR 非真实渲染 UnityURP-AnimeStyleCelShader SSR 屏幕空间反射 UnitySSReflectionURP

分布式机器学习(Parameter Server)

分布式机器学习中&#xff0c;参数服务器(Parameter Server)用于管理和共享模型参数&#xff0c;其基本思想是将模型参数存储在一个或多个中央服务器上&#xff0c;并通过网络将这些参数共享给参与训练的各个计算节点。每个计算节点可以从参数服务器中获取当前模型参数&#xf…

架构基本概念和架构本质

什么是架构和架构本质 在软件行业&#xff0c;对于什么是架构&#xff0c;都有很多的争论&#xff0c;每个人都有自己的理解。此君说的架构和彼君理解的架构未必是一回事。因此我们在讨论架构之前&#xff0c;我们先讨论架构的概念定义&#xff0c;概念是人认识这个世界的基础…

UWB超宽带定位技术的原理及定位方法

uwb定位技术即超宽带技术&#xff0c;它是一种无载波通信技术&#xff0c;利用纳秒级的非正弦波窄脉冲传输数据&#xff0c;因此其所占的频谱范围很宽。传统的定位技术是根据信号强弱来判别物体位置&#xff0c;信号强弱受外界 影响较大&#xff0c;因此定位出的物体位置与实际…

Redis入门(4)-list

redis中list数据会按照插入顺序进行排序&#xff0c;其底层是一个无头结点的双向链表&#xff0c;因此表头和表尾的操作性能较高&#xff0c;但中间元素操作性能较差。 1.lpush key element [element ] 从表头插入元素 lpush nosql redis hbase lpush nosql mongdb2.lrange…

数据结构--单链表的插入删除

数据结构–单链表的插入&删除 目标 单链表的插入&#xff08;位插、前插、后插&#xff09; 单链表的删除 单链表的插入 按为序插入(带头结点) ListInsert(&L,i,e):插入操作。在表L中的第i个位置上插入指定元素e。 思路&#xff1a;找到第i-1个结点,将新结点插入其…

Mysql架构篇--Mysql(M-M) 主从同步

文章目录 前言一、M-M 介绍&#xff1a;二、M-M 搭建&#xff1a;1.Master1&#xff1a;1.1 my.cnf 参数配置&#xff1a;1.2 创建主从同步用户&#xff1a;1.3 开启复制&#xff1a; 2.Master2&#xff1a;2.1 my.cnf 参数配置&#xff1a;2.2 创建主从同步用户&#xff1a;2.…

Android12之ServiceManager::addService注册服务的本质(一百五十八)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注:Android…

iOS多语言解决方案全面指南

本文以及相关工具和代码旨在为已上线的iOS项目提供一种快速支持多语言的解决方案。由于文案显示是通过hook实现的&#xff0c;因此对App的性能有一定影响&#xff1b;除了特殊场景的文案显示需要手动支持外&#xff0c;其他任务均已实现自动化。 本文中的部分脚本代码基于 Chat…

【软件设计师暴击考点】网络安全等杂项高频考点暴击系列

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;软件…

SpringBoot 日志文件:日志的作用?为什么要写日志?

文章目录 &#x1f387;前言1.日志长什么样子&#xff1f;2.自定义打印日志2.1 在程序中得到日志对象2.2 使用日志对象打印日志 3.日志级别3.1 日志级别的分类与使用3.2 日志级别有什么用呢&#xff1f;3.3 日志级别的设置 4.日志持久化保存5.更方便的日志输出5.1 添加 lombok …

android用java生成crc校验位

在串口通信中&#xff0c;经常会用到后两位生成crc校验位的情况。 下面是校验位生成方法&#xff1a; public static String getCRC(String data) {data data.replace(" ", "");int len data.length();if (!(len % 2 0)) {return "0000";}in…

服务器技术(三)--Nginx

Nginx介绍 Nginx是什么、适用场景 Nginx是一个高性能的HTTP和反向代理服务器&#xff0c;特点是占有内存少&#xff0c;并发能力强&#xff0c;事实上nginx的并发能力确实在同类型的网页服务器中表现较好。 Nginx专为性能优化而开发&#xff0c;性能是其最重要的考量&#xf…

3-css高级特效-1

01-平面转换 简介 作用&#xff1a;为元素添加动态效果&#xff0c;一般与过渡配合使用 概念&#xff1a;改变盒子在平面内的形态&#xff08;位移、旋转、缩放、倾斜&#xff09; 平面转换也叫 2D 转换&#xff0c;属性是 transform 平移 transform: translate(X轴移动距…

最新导则下生态环评报告编制要求与规范

根据生态环评内容庞杂、综合性强的特点&#xff0c;依据生态环评最新导则&#xff0c;将内容分为4大篇章(报告篇、制图篇、指数篇、综合篇)、10大专题(生态环评报告编制、土地利用图的制作、植被类型及植被覆盖度图的制作、物种适宜生境分布图的制作、生物多样性测定、生物量及…

基于matlab基于预训练的膨胀双流卷积神经网络的视频分类器执行活动识别(附源码)

一、前言 此示例首先展示了如何使用基于预训练的膨胀 3-D &#xff08;I3D&#xff09; 双流卷积神经网络的视频分类器执行活动识别&#xff0c;然后展示了如何使用迁移学习来训练此类视频分类器使用 RGB 和来自视频的光流数据 [1]。 基于视觉的活动识别涉及使用一组视频帧预…

STM32外设系列—DHT11

文章标题 一、DHT11简介二、数据手册分析2.1 接口说明2.2 串行通信说明2.2.1 单总线通信2.2.2 单总线传输数据位定义2.2.3 时序图 三、DHT11程序设计3.1 初始化GPIO3.2 发送起始信号3.3 接收一个字节数据3.4 接收温湿度信息并校准 四、总结 一、DHT11简介 DHT11是一款常用的数…

快速点特征直方图(FPFH)描述子提取

快速点特征直方图&#xff08;Fast Point Feature Histograms&#xff0c;FPFH&#xff09;介绍 快速点特征直方图&#xff08;Fast Point Feature Histograms&#xff0c;FPFH&#xff09;是一种基于点的描述子&#xff0c;用于描述点云数据中的局部几何信息。FPFH描述子是在…

浅尝kubernetes

浅尝kubernetes 前言&#xff1a;我们早学习一门技术之前并不需要从头到尾的详细的查看一遍&#xff0c;只需要看一看是什么&#xff1f;能干什么&#xff1f;怎么用&#xff1f;即可&#xff01; 一、了解kubernetes Kubernetes 也称为 K8s&#xff0c;是用于自动部署、扩缩和…

【C/C++实现进程间通信 二】消息队列

文章目录 前情回顾思路源码Publisher.cppSubscriber.cpp 效果 前情回顾 上一期已经讲解过了进程的相关概念以及进程间通信的实现原理&#xff0c;下面仅展示消息传递机制实现1进程间通信的相关代码。 思路 /*本项目主要用于以消息传递机制的方式进行进程间通信的测试。1.主要…