【opencv】windows10下opencv4.8.0-cuda版本源码编译教程
【opencv】windows10下opencv4.8.0-cuda版本源码编译教程
提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论
文章目录
- 【opencv】windows10下opencv4.8.0-cuda版本源码编译教程
- 前言
- 准备工具
- cuda/cudnn
- cmake
- opencv4.5.0
- opencv_contrib
- CMake编译
- VS2019编译
- 可能出现的问题
- cmake编译过程中可能出现的问题
- VS2019编译过程中可能出现的问题
- 通常是对于部分资源,vs2019没有管理员操作权限,因此只需要用管理员身份重新打开进行操作即可。 
- 测试使用GPU
- 总结
前言
OpenCV是一个开源的计算机视觉库,包含了核心模块和扩展模块,提供了基础的图像处理和计算机视觉算法,以及一些机器学习工具。而OpenCV Contrib是OpenCV社区贡献的一组扩展模块之一,包含了一些较为新颖和实用的算法和工具函数,提供了一些高级的图像处理和计算机视觉算法。这些功能和算法可能不适合所有用户或者还处于实验性阶段。OpenCV Contrib模块中的代码由社区贡献者开发和维护,它们提供了一些在OpenCV核心库中尚未包含的新特性和实验性功能。
准备工具
cmake、vs2019、opencv4.8.0、opencv_contrib-4.8.0、cuda、cudnn
cuda/cudnn
安装cuda、cudnn可以参考此前博主的【深度学习windows10环境配置详细教程】,因为对于新手来说,需要注意的细节比较多,这里不浪费篇幅重复讲述了。
cmake
CMake官方下载地址,下载cmake-3.27.7-windows-x86_64.msi。
添加到环境和安装路径博主根据自身情况作出了修改,其他都是默认安装。
出现以下界面安装成功。
opencv4.5.0
Opencv官方下载地址,下载OpenCV – 4.8.0 Sources,下载解压opencv-4.8.0.zip。
opencv_contrib
opencv_contrib官方下载地址,选择opencv对应的contrib版本,例如opencv4.8.0对应就是opencv_contrib-4.8.0.zip。下载后直接解压。
CMake编译
- 打开CMake,where is the source code是Opencv sources(博主是opencv-4.8.0)的文件夹位置,where to build the binaries是编译opencv保存的文件夹位置(自定义),最后点左下角Configure。
- 选择对应vs的版本(博主是vs2019),系统选择x64,最后点右下角Finish。
- 显示Configuring done后,在Search搜索框搜索带cuda的关键字,全部勾选。
- Search搜索框搜索OPENCV_EXTRA_MODULES_PATH,添加解压的opencv_contrib中的modules的路径,再搜索并勾选OPENCV_ENABLE_NONFREE和 ENABLE_FAST_MATH选项。
- 将build_opencv_world选上,这可以将所有opencv的库都编译在一起,不需要自己手动选择添加每个小模块,但是具体的工程又不建议这种全家桶,再次点击Configure。
- 显示Configuring done后,将CUDA_ARCH_BIN显卡算力内容改成自己显卡的算力。官网查看显卡算力地址,删除小于自己显卡算力的部分,再次点击Configure。
- 显示Configuring done后,点击generate,显示generating done,成功完成cmake编译,在输出的opencv保存文件夹位置中存在就生成了OpenCV.sln文件。
cmake编译过程是会从githup上下载数据,但是一般都会出现下载失败的情况,这里建议读者先跳到【可能出现的问题】这一小节,来确认是不是自己也出现了下载失败的情况。
VS2019编译
- 使用VS2019 (以管理员方式运行) 打开刚刚编译工程OpenCV.sln,在release|x64模式下,在解决方案资源管理器—>CMakeTargets—>右键点击ALL_BUILD–>生成。
- 同样在release|x64模式下,在解决方案资源管理器—>CMakeTargets—>右键点击INSTALL–>生成。
编译完成后在where to build the binaries位置的install文件夹内生成以下内容。
可能出现的问题
cmake编译过程中可能出现的问题
cmake编译出现Download failed的问题。
在where to build the binaries位置里面有个CMakeDownloadLog.txt,将里面下载链接复制到浏览器进行下载,
将其和where is the source code里面的.cache文件夹里面内容相对应,下图是下载失败时候,文件大小是0KB,手动下载完成后进行替换,对于部分文件则需要从网页复制文本内容到其中。
注意用来替换的文件的名称要与对应空文件的名称保持一致。
将整个.cache都用同样的方式进行处理。
强调一点,出现这种问题,可以暂时先走完CMake编译过程,因为每一次Configuring都会有新的下载内容,然后再一次性将.cache的内容进行完整的替换,最后进行Configuring和Generate。
VS2019编译过程中可能出现的问题
通常是对于部分资源,vs2019没有管理员操作权限,因此只需要用管理员身份重新打开进行操作即可。

测试使用GPU
这里用一段简单的c++代码验证安装完成的opencv是否支持gpu设备。
#include <opencv2/opencv.hpp>
#include <opencv2/core/cuda.hpp>
int main() {// 检查是否支持CUDAif (cv::cuda::getCudaEnabledDeviceCount()) {std::cout << "检测到支持CUDA的设备数量" << cv::cuda::getCudaEnabledDeviceCount() <<std::endl;}else {std::cout << "未检测到支持CUDA的设备" << std::endl;}return 0;
}
验证成功,oepncv-cuda版本源码编译成功。
总结
尽可能简单、详细的介绍windows10下opencv4.8.0-cuda版本用源码进行编译的详细流程。
相关文章:

【opencv】windows10下opencv4.8.0-cuda版本源码编译教程
【opencv】windows10下opencv4.8.0-cuda版本源码编译教程 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【opencv】windows10下opencv4.8.0-cuda版本源码编译教程前言准备工具cuda/cudnncmakeopencv4.5.0opencv_contrib CMake编译VS2019编译可…...

31 数据分析(中)numpy介绍
文章目录 工具excelTableauPower Queryjupytermatplotlibnumpy安装导入包快速掌握(bushi)array和list的相互转化 np的range多维数组的属性array的改变形状array升降维度array内元素的类型数和array的运算array之间的加减法认识轴切片条件与逻辑修改值app…...
华为OD机考算法题:字符串划分
题目部分 题目字符串划分难度难题目说明给定一个小写字母组成的字符串s,请找出字符串中两个不同位置的字符作为分割点,使得字符串分成的三个连续子串且子串权重相等,注意子串不包含分割点。 若能找到满足条件的两个分割点,请输出…...
AF_UNIX和127.0.0.1(AF_INET)回环地址写数据速度对比(二)
之前写了篇博客:AF_UNIX和127.0.0.1(AF_INET)回环地址写数据速度对比 然后利用的是发送端读取大文件,接收方接收并保存为文件的方式进行测试,结果发现,AF_UNIX并未比127.0.0.1(AF_INET)回环地址优秀,若单次发送的字节数…...

“Python+”集成技术高光谱遥感数据处理与机器学习教程
详情点击公众号链接:“Python”集成技术高光谱遥感数据处理与机器学习教程 第一:高光谱基础 一:高光谱遥感基本概念 01)高光谱遥感 02)光的波长 03)光谱分辨率 04)高光谱遥感的历史和发展 二:高光谱传感器与数据获取 01)高…...
centos7 快速搭建自测mysql环境 docker + mysql
环境准备 centos7快速搭建docker mysql docker镜像源配置 一般都是要配的不然太慢了,docker 1.12以上创建或修改 /etc/docker/daemon.json 文件,修改为如下形式: 地址替换国内源 {"registry-mirrors" : ["https://docker.mirrors.u…...

c++视觉检测-----Canny边缘算子
Canny边缘算子 cv::Canny()是OpenCV库中用于执行Canny边缘检测的函数。Canny边缘检测是一种广泛使用的图像处理技术,用于检测图像中的边缘。 以下是cv::Canny()函数的一般用法和参数: void cv::Canny(cv::InputArray image, // 输入图像&#x…...

机器学习笔记 - 用于动作识别的网络TSN/TSM/SlowFast/R(2+1)D/3D MobileNetV2
一、简述 动作识别是在视频序列中检测和分类人类动作的过程。 近年来,由于其广泛的应用,它已成为一项越来越重要的技术,例如监控、人机交互以及视频索引和检索。 特别是,动作识别对于无人驾驶飞行器 (UAV) 或无人机来说变得至关重要,因为它们越来越多地用于各种应用,例如…...
mybatis批量插入
一、定义DBExec import java.util.List;public abstract class DBExec<T> {public abstract void operate(List<T> list); }二、定义BatchDBService public interface BatchDBService<T> {void exec(int batchSize, List<T> list, DBExec<T> d…...

软件‘小程序‘前台开发软件定制的知识|app网站搭建
软件,小程序,前台开发软件定制的知识 随着互联网的快速发展,软件,小程序,前台开发软件定制已经成为了企业必备的工具。它可以帮助企业更好地管理业务,提高效率,增强用户体验。那么,什…...

HTML-注册页面
<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>注册页面</title> </head> <body><from action"#" method"get"><table border"1" align&q…...

17.(开发工具篇Gitlab)如何在Gitlab配置ssh key
前言: Git是分布式的代码管理工具,远程的代码管理是基于SSH的,所以要使用远程的Git则需要SSH的配置 一、git 配置 (1)打开 git 命令窗口 (2)配置用户名(填自己的姓名) git config --global user.name “chenbc” (3)配置用户邮箱(填自己的邮箱) git config …...

ArcGIS/GeoScene脚本:基于粒子群优化的支持向量机分类模型
参数输入 输出 栅格 预测为负类的概率 预测为正类的概率 二值化结果 评估结果 ROC曲线...

Python+Tkinter 图形化界面基础篇:添加图形和图像
PythonTkinter 图形化界面基础篇:添加图形和图像 引言添加图形元素步骤1:导入 Tkinter 步骤2:创建主窗口步骤3:创建 Canvas 步骤4:绘制图形 绘制线条 绘制矩形 绘制椭圆 绘制多边形 步骤5:启动主事件循环 显…...
前端js八股文大全
一、js的数据类型 值类型(基本类型):数字(Number)、字符串(String)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol,大数值类型(BigInt) 引用数据类型:对象(Object)、数组…...

[环境]Ubuntu20.04安装Ceres
安装这么顺利我有点不适应,记录一下 注意安装的位置与层级关系 参考链接 知乎方案...

ruoyi 若依 前端vue npm install 运行vue前端
首次导入,需要先执行 npm install #进入到前端模块目录下 cd ruoyi-ui # 安装 npm install 启动后端项目 运行前端项目:运行成功后,会浏览器自动加载到前端首页(或者 浏览器访问打印的两个地址) # 运行 npm run dev 部…...
各大搜索引擎的User-Agent
各大搜索引擎的User-Agent baidu:Mozilla/5.0 (compatible; Baiduspider/2.0; http://www.baidu.com/search/spider.html) Google:Mozilla/5.0 (compatible; Googlebot/2.1; http://www.google.com/bot.html) Sogou:Sogou web spider/4.0(h…...

codesys【按钮】
1用于控制bool信号。 1声明全局变量 2绑定该变量 运行后,按钮就能控制这个bool变量了。 2按钮【自复位】 3按钮【锁位】...
SSH在桌面会话启动应用程序
通过远程SSH会话在实体机(物理机)的当前登录用户的桌面会话上启动应用程序 1. 找到用户的桌面会话的DISPLAY变量 在大多数情况下,主桌面会话的DISPLAY变量设置为:0,但为了确定,你可以运行以下命令查找活跃的DISPLAY&…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...

STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...

Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...

基于PHP的连锁酒店管理系统
有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...