OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。项目源码由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

  但在实际使用中,如果是对处理时间要求比较高的场景,使用OpenCV处理图片数据很难满足要求,不过OpenCV支持使用CUDA进行加速,不过支持CUDA加速的依赖包需要我们自行编译才可使用,因此在本次文章中,我们将演示如何使用OpenCV源码自行编译代码文件,来实现CUDA加速。

1. 环境准备

1.1 软件环境

  本次编译平台使用的是 Windows 11 系统,使用CMake-gui + VS2022进行源码编译,为了大家更好的复现该项目,此处罗列一下本文所使用的环境:

  • CUDA: 12.2, cudnn: 8.9.3
  • Cmake: 3.28.0
  • Visual Studio 2022

关于以上环境的安装,大家可以查看网上相关文档自行安装即可。

1. 2 源码下载

  接下来需要下载OpenCV源码,此处需要下载两个源码,分别是opencvopencv_contrib。下载链接为

opencv:
https://github.com/opencv/opencv/archive/4.8.0.zip
opencv_contrib:
https://github.com/opencv/opencv_contrib/tags

  不过在下载时要注意一点,就是要保证opencvopencv_contrib下载的版本要一致,此处我们下载的版本为:4.8.0。下载完成后,将两个文件解压到同一个文件夹中,如下图所示。

2. CMake编译项目

2.1 创建cmake项目

  打开CMake软件,设置项目源码路径,并在源码路径下创建一个build文件夹,并设置编译文件夹,如下图所示:

  接下来点击Configure,进行第一次配置,然后回弹出编译平台选择,此处根据自己电脑的编译软件进行选择,在本文中我们使用的是Visual Studio 2022,然后选择编译平台为x64

  第一次配置生成后,输出如下所示:

2.2 设置编译配置

  首先添加opencv_contrib模块的引用,在OPENCV_EXTRA_MODULES_PATH条目中添加该模块的路径,然后选择OPENCV_ENABLE_NONFREE,如下图所示:

  接下来添加CUDA的设置,首先选择WITH_CUDA,如下图所示:

  然后选择OPENCV_DNN_CUDA,此处还可以选择OPENCV_DNN_OPENVINO等不同的模型部署,如下图所示:

  最后选择ENABLE_FAST_MATH

  此处为了让生成的依赖库文件都集成在一个文件中,方便后面使用,所以此处可以选择BUILD_opencv_world,如果不选择,生成的 文件将会被拆散成多个文件。

  第二次Configure后,下一步就是需要检查一下其过程是否有异常抛出

2.3 解决异常

2.3.1 文件下载异常

  首先查看一下配置输出框是否抛出警告,如果有的话,一定要解决一下,不然后续编译会出错。

  当出现上图所示的异常后,就需要手动解决一下该问题,首先找到build\CMakeDownloadLog.txt文件,然后打开后,查看一下是否有下图所示的文件确实异常。如果有,请自行下载,下载链接如下图所示标注位置,下载后将文件放置在下图所示缺失文件路径,并按照要求修改名称。

2.3.2 解决CUDA版本异常

  该异常会在最后编译过程中出现,主要是当CUDA>=12.2时会出现该问题,因此需要检查一下自己的CUDA版本是否大于12.2.查看CUDA版本方式如下图所示。

  如果你的CUDA版本大于12.2,就要根据官方的要求进行修改,官方提供的解决方式链接为:cuda: fix for compatibility with CUDA Toolkit >= 12.2.0 by cudawarped · Pull Request #24104 · opencv/opencv (github.com)

其主要修改内容如下图所示。

2.4 编译项目

  解决完上述异常后,就可以进行项目编译了,点击Generate,就可以自动生成项目了。

3. Visual Studio 编译项目

  首先我们打开build\文件夹,可以看到生成的OpenCV.sln解决方案文件,使用Visual Studio打开该项目。

  然后运行ALL_BUILD项目即可,此处运行时间会比较长,尤其是再加入CUDA支持后,编译时间会更久。

  编译完成后,可以获得下面文件夹内容,此处主要是两个有用的文件夹,一个是install文件夹,这个文件夹主要是包含的时项目运行的依赖项,包括include/文件夹以及 .lib.dll等文件;第二个是python_loader文件夹,主要是python运行所需的依赖项。

4. 项目测试

  项目编译完成后,最后我们查看一下项目是否编译成功,此处使用cv2.cuda.getCudaEnabledDeviceCount()接口方法检查一下是否存在在线的CUDA设备,如果存在CUDA设备,将返回设备数量,如果没有,将返回0。如下图所示,在运行后,输出为1,本机设备只存在一个显卡,所以索命该项目已经编译好了。

5. 总结

  在本文中,我们实现了OpenCV源码编译,并结合本机安装的CUDA版本,实现了CUDA版本的OpenCV编译,并实现了Python API 以及C++ API 的使用。后续我们将会结合所编译的库进行项目开发以及与普通版本进行对比。

【OpenCV】 OpenCV 源码编译并实现 CUDA 加速 (Windows)的更多相关文章

  1. Ubuntu 17.04版本下,opencv进行源码编译安装

    本文主要针对Ubuntu 17.04版本下,opencv进行源码编译安装.开发环境主要针对python 对 openCV库的调用. 安装 gcc cmake 编译环境 sudo apt-get ins ...

  2. windows 10 上源码编译opengv | compile opengv on windows 10 from source

    本文首发于个人博客https://kezunlin.me/post/51cd9fa0/,欢迎阅读! compile opengv on windows 10 from source Series co ...

  3. tensorflow 源码编译tensorflow 1.1.0到 tensorflow 2.0,ver:1.1.0rc1、1.4.0rc1、1.14.0-rc1、2.0.0b1

    目录 tensorflow-build table 更多详细过程信息及下载: tensorflow-build tensorflow 源码编译,提升硬件加速,支持cpu加速指令,suport SSE4 ...

  4. linux源码编译安装OpenCV

    为了尽可能保证OpenCV的特性,使用OpenCV源码编译安装在linux上.先从安装其依赖项开始,以ubuntu 14.04.X为例讲解在Linux上源码编译安装OpenCV,其他linux版本可以 ...

  5. [笔记] Ubuntu 18.04源码编译安装OpenCV 4.0流程

    标准常规安装方法安装的OpenCV版本比较低,想尝鲜使用4.0版本,只好源码安装. 安装环境 OS:Ubuntu 18.04 64 bit 显卡:NVidia GTX 1080 CUDA:10.0 c ...

  6. win10 vs2015源码编译opencv、opencv_contrib、Tesseract

    1.软件包准备 opencv源码包地址:                官网  github opencv_contrib源码包地址:   github Tesseract源码包地址:        ...

  7. 能把opencv的源码也进行调试吗?(需要pdb文件才行)

    能把opencv的源码也进行调试吗?(需要pdb文件才行)1.我是用的Qt Creator,然后"工具\选项\调试器\概要\源码路径映射"中,选择"添加Qt源码" ...

  8. [记] OpenCV4 源码编译安装 | 记录

    OpenCV4 源码编译安装 | 记录 参考资料 官方文档:https://docs.opencv.org/4.x/d7/d9f/tutorial_linux_install.html 环境 wsl2 ...

  9. 解决 Ubuntu16.04 + opencv4.1 源码编译错误 Makefile:160: recipe for target 'all' failed

    最近源码编译 opencv,出现下面的错误 [ %] Built target opencv_dnn Makefile:: recipe for target 'all' failed google ...

  10. Ubuntu 环境 TensorFlow (最新版1.4) 源码编译、安装

    Ubuntu 环境 TensorFlow 源码编译安装 基于(Ubuntu 14.04LTS/Ubuntu 16.04LTS/) 一.编译环境 1) 安装 pip sudo apt-get insta ...

随机推荐

  1. Azure Data Factory(八)数据集验证之服务主体(Service Principal)

    一,引言 如下图所示,今天我们接着上一篇内容,继续讲解 Azure Data Factory 中的数据集连接服务的认证方式:Service Principal 关于 Service Principal ...

  2. strimzi实战之一:简介和准备

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 关于strimzi strimzi是一个开源项目,已加 ...

  3. 解密IP分片与重组:数据传输中的关键技术

    引言 在上一章节中,我们详细讨论了IP的分类和无分类原则的原理以及其在网络通信中的应用.IP分片与重组是在数据包传输过程中起到关键作用的机制.当数据包的大小超过网络链路的MTU(最大传输单元)限制时, ...

  4. Django——后台添加的用户密码错误

    django项目中,当我们创建了user模型类,并生成了超级管理员,之后我们进入到admin后台页面中,添加一个用户,再去login页面登陆时,会提示我们 用户名或密码错误. 这时,我们第一时间会想到 ...

  5. MySQL——MySQL面试题

    文章目录 数据库基础知识 为什么要使用数据库 什么是SQL? 什么是MySQL? 数据库三大范式是什么 mysql有关权限的表都有哪几个 MySQL的binlog有有几种录入格式?分别有什么区别? 数 ...

  6. 在Docker下一键安装部署免费开源的问答社区!

    在Docker下一键安装部署免费开源的问答社区!   1.准备一台VPS主机,没有的话,[搞一台] 2.一键安装部署Docker wget https://raw.githubusercontent. ...

  7. maven error

    1 [INFO] Assembling webapp [crm9] in [/home/wukongcrm/72crm-java/target/ROOT] 2 [INFO] Processing wa ...

  8. 【开源】给ChatGLM写个,Java对接的SDK

    作者:小傅哥 - 百度搜 小傅哥bugstack 博客:bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 大家好,我是技术UP主小傅哥. 清华大学计算机系的超大规模训练模型 Cha ...

  9. osx12.6设置全屏

    首先安装VMWARE TOOLS就是unlocker208下的tool的darwin.iso 然后进入终端命令,这里要说一下,好多资料说按COMMAND键,反正我是没有进去,直接在vmware菜单里选 ...

  10. 如何用CAN-EYE获取植被参数数据?

      本文介绍植被冠层参数计算软件CAN-EYE的具体使用方法.   在文章下载.安装CAN-EYE植被参数工具中,我们介绍了CAN-EYE软件的下载.安装方法:本文就对该软件的具体使用方法进行介绍. ...