Win10使用VS2019从源码编译OpenCV 4.4 + CUDA 11.0 + Cudnn 8.0 + python3

本文主要介绍Win10使用VS2019从源码编译OpenCV 4.4,并使用opencv_contrib支持CUDA 11.0 + Cudnn 8.0,以及对python3的支持。

1 首先准备安装环境

  • Microsoft Visual Studio 2019

    可以用社区版,免费的。

  • CUDA 11.0

    下载地址:https://developer.nvidia.com/cuda-downloads

    安装顺序建议先安装VS2019再安装CUDA。

  • CUDNN 8.0

    下载地址:https://developer.nvidia.com/cudnn

    下载解压后,分别将cuda/include, cuda/lib, cuda/bin三个目录中的内容拷贝到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0对应的include, lib, bin目录下。

    配置cudnn 8.0
  • CMake

    下载地址:https://github.com/Kitware/CMake/releases

    选择最新版windows版,如cmake-3.18.1-win64-x64.msi,下载完成后直接安装。

  • (可选) Anaconda3

    如果需要把opencv配置到虚拟环境的python3的话,可以使用Anaconda/Miniconda来解决。

  • (可选) ffmpeg

    Windows下直接使用发行版:https://ffmpeg.zeranoe.com/builds/

    选择Shared,下载后将bin文件夹所在的路径添加到环境变量Path

2 下载源代码并修改

打开opencv的源代码目录,找到./opencv/3rdparty/ippicv/ippicv.cmake这个文件,将第47行

"https://raw.staticdn.net/opencv/opencv_3rdparty/${IPPICV_COMMIT}/ippicv/"

中的raw.githubusercontent.com改成raw.staticdn.net

同样的,./opencv/3rdparty/ffmpeg/ffmpeg.cmake的第25行的网址改为:

"https://raw.staticdn.net/opencv/opencv_3rdparty/${FFMPEG_BINARIES_COMMIT}/ffmpeg/"

对于opencv_contrib,同样的操作,修改以下配置代码:

./opencv_contrib/modules/xfeatures2d/camke/download_boostdesc.cmake
# 第27行改为"https://raw.staticdn.net/opencv/opencv_3rdparty/${OPENCV_3RDPARTY_COMMIT}/"
./opencv_contrib/modules/xfeatures2d/camke/download_vgg.cmake
# 第21行改为"https://raw.staticdn.net/opencv/opencv_3rdparty/${OPENCV_3RDPARTY_COMMIT}/"
./opencv_contrib/modules/face/CMakeLists.txt
# 第19行改为"https://raw.staticdn.net/opencv/opencv_3rdparty/${__commit_hash}/"

3 运行cmake

打开cmake,设置源代码路径(刚刚下载的opencv代码所在文件夹)和build路径(需要自己新建build的文件夹),然后点击Configure,会弹窗让选择VS版本,这里选择vs2019,其他选项默认,点击Finish完成,然后等待即可。

cmake的设置

之后需要配置一些选项。这几个需要打勾:

BUILD_opencv_world
WITH_CUDA
WITH_CUDNN

如果没有的话,使用Add Entry手动添加。

Add Entry

OPENCV_EXTRA_MODULES_PATH这个选项中,需要添加刚刚下载的opencv_contrib的源码路径下的modules目录,注意这里必须把所有的"\"改成"/"才能正确配置。例如:

D:/ProgramData/opencv/opencv_contrib/modules

如果需要配置python3的话,需要注意,BUILD_opencv_python2设置成False,BUILD_opencv_python3设置成True,如果这两项没有的话,直接使用Add Entry添加。

然后配置路径,根据自己的Anaconda以及使用的虚拟环境来设置,例如:

PYTHON3_EXECUTABLE=D:/ProgramData/miniconda3/envs/pytorch/python.exe
PYTHON3_INCLUDE_DIR=D:/ProgramData/miniconda3/envs/pytorch/include
PYTHON3_LIBRARY=D:/ProgramData/miniconda3/envs/pytorch/libs/python38.lib
PYTHON3_NUMPY_INCLUDE_DIRS=D:/ProgramData/miniconda3/envs/pytorch/Lib/site-packages/numpy/core/include
PYTHON3_PACKAGES_PATH=D:/ProgramData/miniconda3/envs/pytorch/lib/python3.8/Lib/site-packages

如果电脑上有ffmpeg的话,还需要给WITH_FFMPEG打勾,如果没有的话,直接使用Add Entry添加。

接下来再次Configure,等待大约2-3分钟,直到下方出现Configuring done。

然后点击Generate,生成项目文件,大约需要30秒,直到下方出现Generating done。

检查输出信息中和配置相关的内容,如python的路径设置,CUDA和Cudnn相关信息,ffmpeg设置等。

4 使用VS2019编译源码

点击CMake中的Open Project或者打开build文件夹中的OpenCV.sln,然后根据需要把配置选成Debug x64Release x64,点击Build --> Rebuild Project,接下来根据电脑配置的不同需要等待大约3-4个小时来编译。

Build

编译好后,找到解决方案目录里的CMakeTargets项展开的INSTALL项,右键 --> Project Only --> Build Only INSTALL。

Build Only INSTALL

之后会在./opencv/build/install/x64/vc16生成编译好的库。

到此编译完成。

最后把bin路径添加到环境变量Path,如:

D:\ProgramData\opencv\build\install\x64\vc16\bin

(取决于你配置的地址)

5 验证opencv是否可用,并运用vs2019在C/C++项目中使用

打开vs2019,新建项目,添加一个调用opencv的源代码,如果没有的话,可以用自带sample中的cpp文件,如:

D:\ProgramData\opencv\samples\cpp\example_cmake\example.cpp

在VS2019中的项目属性设置,选择Release x64,在VC++目录中添加Include Directories (根据自己的编译路径改一下):

D:\ProgramData\opencv\build\install\include

vs2019项目设置

然后在Linker --> Input --> Additional Dependencies 中,添加

opencv_world440.lib

Additional Dependencies

接下来就可以编译运行在vs2019中的项目了。如果是自带的sample,会显示摄像头实时画面,并出现"Hello OpenCV"的文字。

6 验证opencv的python接口是否已经配置好

打开python (如果用anaconda,进入相应的虚拟环境,然后输入python),在命令行运行:

import cv2
cv2.__version__

返回'4.4.0'即表示opencv已配置python接口。

python中验证opencv是否安装好

欢迎大家在评论区补充相关问题分享经验,如需转载请注明出处:
https://www.jianshu.com/p/aa8455fcc672

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,271评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,725评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,252评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,634评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,549评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,985评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,471评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,128评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,257评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,233评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,235评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,940评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,528评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,623评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,858评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,245评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,790评论 2 339