windows使用CMake编译opencv(cv2)使用GPU加速

编译前的一些准备

一、前期准备下载CMake以及VS

CMake链接:https://cmake.org/download/
 VS链接:https://visualstudio.microsoft.com/zh-hans/vs/

过程简单这里不多做赘述

二、下载opencv源码以及opencv_contrib源码

注意!下载的opencv以及opencv_contrib版本号需一致

下载好直接解压到自己指定的位置,得到两个文件夹opencv-4.9.0和opencv_contrib-4.9.0

在opencv-4.9.0里面创建一个build文件夹

CMake编译会碰到的一些问题

在编译过程中在信息窗口会时不时出现一些红色的字,比如:

CMake Warning at cmake/OpenCVDownload.cmake:248 (message):IPPICV: Download failed: 6;"Couldn't resolve host name"

For details please refer to the download log file:

D:/opencv/opencv-4.9.0/opencv-4.9.0/build/CMakeDownloadLog.txt

Call Stack (most recent call first):3rdparty/ippicv/ippicv.cmake:37 (ocv_download)   cmake/OpenCVFindIPP.cmake:259 (download_ippicv)cmake/OpenCVFindLibsPerf.cmake:12 (include)   CMakeLists.txt:812 (include)

这些是因为网络问题无法下载导致的,这也会导致后期使用VS编译时候出现报错

如果有遇到可以跳转至:解决CMake编译opencv时ffmpeg为NO问题

CMake编译

打开CMake,红框放解压出来的opencv-4.9.0的路径,蓝框放刚刚创建的build路径

点击Configure,跳出下面这个窗口按我这样配置然后点击Finish

等待配置之后会出现一大堆红色信息

搜索框搜索PYTHON3,Value的值是你python的路径,我这边用的是anaconda3创建的虚拟环境

PYTHON3_NUMPY_INCLUDE_DIRS的路径是numpy库的路径,我的路径为:

E:/anaconda3/envs/factory/Lib/site-packages/numpy/core/include

再次点击Configure

Configure完成后搜索栏搜cuda,全部打勾

再搜索modules,选择opencv_contrib-4.9.0下面的modules路径

再次点击Configure

等待结束后继续搜索OPENCV_DNN_CUDA、WITH_CUDA 、ENABLE_FAST_MATH

三个全部打钩,再次Configure

接着搜索BUILD_opencv_world

              UILD_opencv_python3

              OPENCV_ENABLE_NONFREE

              BUILD_opencv_world

全部打勾

这边要注意:BUILD_opencv_python3是必须打勾的,如果搜索不到的话那回到前面的步骤一步一步看着重新来,不然到后面VS编译的时候会有问题

接着Configure

完成后搜索CUDA_ARCH_BIN填写自己显卡的算力

查询链接:https://developer.nvidia.com/cuda-gpus

我的是2060显卡所以是7.5

CUDA_FAST_MATH也打勾,加快运算

最后一次点击Configure等待出现Configuring done字眼之后点击Generate,完成后如下图

VS编译

点击Open Project应该会自动打开VS,如果没有自动打开的可以打开前面创建的build的路径,直接双击OpenCV.sln即可打开VS

Debug模式改为Release

查看解决方案,点击打开bindings里面有一个opencv_python3,右键点击属性,如下图点击编辑

勾选从父级或项目默认设置继承后点击确定

打开CMakeTargets里面有一个ALL_BUILD,右键-->生成

进入漫长的等待

结果大概长这样,只要没有报错就可以了

最后一步!解决方案中选中INSTALL--右键--生成,等待完成结果和上图一样,没报错就成功了

最后测试一下

import cv2

print(cv2.cuda.getCudaEnabledDeviceCount())

输出不是0就编译成功啦!

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值