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

news2024/12/24 8:41:22

目录

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,看看是否可以正常导入并输出版本号,如下图所示,说明安装成功。

 

 

 

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

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

相关文章

Android学习_Mars老师之Mp3视频开发

实现的功能&#xff1a;开发一个可以播放音乐并同步显示歌词文件的APP. 成果展示&#xff1a; 总体设计图&#xff1a; 实现流程图 代码展示&#xff1a; AndroidManifest.xml <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:androi…

信道编码:MATLAB使用卷积编译码函数

信道编码&#xff1a;MATLAB 使用Conv函数 1. 相关函数 在进行卷积编码的过程中&#xff0c;使用的函数是convenc()函数和vitdec()函数&#xff0c;同时需要poly2trellis()函数。 1.1 poly2trellis()函数 先看poly2trellis()函数,用来生成卷积编码所需要的网表。 trellis …

svn commit 用法

转载   原文&#xff1a;https://blog.csdn.net/qq_39790633/article/details/103700391 使用svn进行代码的提交有两种方法&#xff1a;一种是通过TortoiseSVN客户端界面进行提交&#xff0c;另一种是通过svn commit指令提交。 方法一&#xff1a;通过TortoiseSVN客户端界面提…

【Python 随练】文本颜色设置

题目&#xff1a; 文本颜色设置 简介&#xff1a; 在本篇博客中&#xff0c;我们将学习如何在Python中设置文本的颜色。我们将介绍一个常用的库&#xff0c;并提供代码示例来演示不同颜色的设置。 问题分析&#xff1a; 我们需要在Python中设置文本的颜色&#xff0c;以增…

3.2迷宫求解

首先我没 看懂数据结构书上写得迷宫 求解 不过 不重要了 迷宫求解 需要先有个 迷宫 游戏 以下 是 Java写的 控制台迷宫游戏 import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern;public class MazeGameJ {public static void main(St…

云原生|kubernetes|centos7下离线化部署kubesphere-3.3.2---基于kubernetes-1.22.16(从网络插件开始记录)

前言&#xff1a; kubesphere的离线化部署指的是通过自己搭建的harbor私有仓库拉取镜像&#xff0c;完全不依赖于外部网络的方式部署。 我的kubernetes集群是一个单master节点&#xff0c;双工作节点&#xff0c;总计三个节点的版本为1.22.16的集群。 该集群只是初始化完成了…

在Excel当前窗口显示最后一行数据

大家也许都知道Excel工作表中数据行数较多&#xff0c;使用<Ctrl下箭头>组合键可以快速定位最后一行&#xff0c;但是如果数据不是连续的&#xff08;也就是工作表中包含空行&#xff09;&#xff0c;这个方式就只能定位到当前连续数据区域的最后一行。 如下实例代码可以…

Visual Studio2019更改并下载.Net Framework目标框架

一、问题 当使用.net进行开发时&#xff0c;开发的项目与.net framework目标框架会非常密切相关的&#xff0c;所以当vs本地使用的.net framework框架与该项目工程的框架不一致的时候&#xff0c;就可能打开不了当前项目&#xff0c;解决这个问题的方法有&#xff1a; 第一种…

方向导数和梯度

理性认识的三个阶段&#xff1a;定义、判断、推理。 有位博主说过&#xff0c;数学中&#xff0c;定义占60%的内容。 方向导数定义如下&#xff1a; 注意的一点是&#xff1a; 该处的alpha&#xff0c;beta角度关系是alpha beta pi/2。t*cos alpha &#xff0c;t * cos …

两百行代码实现简易点云标注工具

夏天来了非常热&#xff0c;LZ周末不想出去玩&#xff0c;于是乎继之前的图片标注工具利用两个晚上写了一个简单的点云标注工具。该工具基于Qt5.14.2-msvc2017&#xff08;其实LZ的VS版本是2019&#xff0c;似乎兼容&#xff09;平台C语言开发&#xff0c;用到的第三方库为PCL1…

ModaHub魔搭社区:“百模大战”下,字节跳动选择做一个“大模型商场”

“火山方舟”面向企业提供模型精调、评测、推理等全方位的平台服务&#xff08;MaaS&#xff0c;即Model-as-a-Service&#xff09;&#xff0c;目前集成了百川智能、出门问问、复旦大学MOSS、IDEA研究院、澜舟科技、MiniMax、智谱AI等多家AI科技公司及科研团队的大模型。 这种…

通过elementui的el-table实现table嵌套展示

el-table属性&#xff1a; :expand-row-keys: 可以控制行的展开和关闭&#xff0c;也可以控制只能有一行进行展开 expand-change&#xff1a;是表格行的切换事件&#xff0c;具体方法如下 el-table-column属性&#xff1a; type"expand" &#xff1a;表示如果有子t…

从网上复制shell脚本 到 linux下运行 碰到的各种问题汇总

从网上复制shell脚本 到 linux下运行 碰到的各种问题汇总 快捷键CtrlU查看网页源码 一、报错现象&#xff1a;: No such file or directory 解决方法&#xff1a;在linux系统下执行&#xff1a;dos2unix filename 问题原因&#xff1a;本质是文件中二进制符号^M乱码问题 参考…

JAVA学习(七)

1. JAVA 多线程并发 1.1 JAVA 并发 并发知识库 1.2 JAVA 线程实现/创建 创建方式 1.2.1 承 继承 Thread 类 Thread 类本质上是实现了 Runnable 接口的一个实例&#xff0c;代表一个线程的实例。启动线程的唯一方 法就是通过 Thread 类的 start()实例方法。start()方法是一个…

c++实现httpd服务器

文章目录 网络的初始化端口的分配协议的使用WSAStartup函数参数1&#xff1a;WORD wVersionRequested参数2&#xff1a;LPWSADATA lpWSAData返回值 int代码实现 创建套接字int af表示套接字的类型(网络套接字 文件套接字)int type数据流 数据报int protocol 通信协议 TCP &…

网络空间安全数学基础考试要点

网络空间安全数学基础 阶的计算不要求那个公式&#xff0c;但是Order几次方要求 考试会考原根 Legendre必考 多项式计算必考 扩域多项式计算 同态不考 域元素表示 本元多项式不考 1.整除 3 ≡ \equiv ≡ 4 mod 7不对吧3 ≡ \equiv ≡ 3 mod 74 ≡ \equiv ≡ 4 &#xff08;m…

DITA技巧:给文字加颜色

- 1 - 场景 在文档中&#xff0c;我们有时候会在文字中使用颜色。 比如&#xff1a; 在文档中&#xff0c;使用在文字上加颜色来代表一定意义。使用MS Word编写文档的时候&#xff0c;直接在文字上加颜色就可以了。转换成DITA以后&#xff0c;大家会发现在XML编辑器的工具栏…

css实现大屏效果的背景div

实现大屏效果的背景div, 效果如下: html <div class"box">1111111</div>css .box {width: 200px;height: 80px;background: linear-gradient(270deg, #00cda2, #00cda2) 0 0 no-repeat,linear-gradient(180deg, #00cda2, #00cda2) 0 0 no-repeat,line…

JUC高并发编程-初篇(后续发布高阶篇)

JUC高并发编程 1.JUC概述 1.1 什么是JUC JUC就是java.util.concurrent工具包的简称。这是一个处理线程的工具包&#xff0c;JDK1.5开始出现的。 1.2 线程和进程概念 进程&#xff1a;指在系统中正在运行的一个应用程序&#xff1b;程序一旦运行就是进程&#xff1b;进程—…

数据结构--队列的基本概念

数据结构–队列的基本概念 队列的定义 队列其实是一种受限制的线性表 队列(Queue)&#xff1a;是 只允许在一端进行插入或删除操作 \color{red}只允许在一端进行插入或删除操作 只允许在一端进行插入或删除操作的线性表 重要术语: 队头、队尾、空队列 队列的特点: 先进先出 \…