1 环境准备

1 vs2019

2 anaconda+Python3.6+numpy

3 cuda和cudnn环境

4 cmake

5 OpenCV4.5.0以及OpenCV-contrib4.5.0压缩包

本人电脑里的cuda和cudnn环境如下:

python编译 VS安装 vs2019编译python_OpenCV-contrib


当然Python环境可以不用anaconda,自己去下载Python3.6安装,然后装上numpy模块,因为Python版本的OpenCV依赖于numpy。如果用户仅仅需要编译C++版本的OpenCV,可以去掉Python环境。

2 cmake编译

将下载的OpenCV两个压缩包解压

python编译 VS安装 vs2019编译python_OpenCV-contrib_02


进入OpenCV4.5.0目录下,新建一个文件夹build,作为cmake编译文件存放目录。

打开cmake,目录选择如下:

python编译 VS安装 vs2019编译python_cudnn_03


然后点击configure

python编译 VS安装 vs2019编译python_cudnn_04


点击完成

等待configure完成,在这个界面中进行如下更改:

将build_java勾选取消、build_tests勾选取消、with vtk勾选取消

勾选上这个OPENCV_ENABLE_NONFREE

python编译 VS安装 vs2019编译python_OpenCV4.5_05


勾选BUILD_opencv_world

python编译 VS安装 vs2019编译python_OpenCV-contrib_06

python编译 VS安装 vs2019编译python_python编译 VS安装_07

然后添加contrib的目录:

python编译 VS安装 vs2019编译python_cuda_08


以上几个选项就是C++编译环境的设置,如果用户不需要编译Python版本,就可以到这一步。

接下来设置Python版本OpenCV的生成

对于cmake界面中有些选项如果没有的话,需要手动添加Add Entry

新建BUILD_opencv_python3以及BUILD_opencv_python2

一个为true一个为false

python编译 VS安装 vs2019编译python_OpenCV4.5_09


python编译 VS安装 vs2019编译python_OpenCV4.5_10


python编译 VS安装 vs2019编译python_python编译 VS安装_11


然后根据自己的anaconda中Python和numpy的路径来进行如下配置:

python编译 VS安装 vs2019编译python_OpenCV-contrib_12

python.exe所在路径:
PYTHON3_EXECUTABLE=G:/install/conda/envs/python368/python.exe
头文件目录:
PYTHON3_INCLUDE_DIR=G:/install/conda/envs/python368/include
Python的lib文件路径:
PYTHON3_LIBRARY=G:/install/conda/envs/python368/libs/python36.lib
numpy模块中头文件目录:
PYTHON3_NUMPY_INCLUDE_DIRS=G:/install/conda/envs/python368/Lib/site-packages/numpy/core/include
Python第三方模块所在目录:
PYTHON3_PACKAGES_PATH=G:/install/conda/envs/python368/Lib/site-packages

到这一步Python的环境就配置好了,接下来配置GPU环境:

勾选上WITH_CUDA

python编译 VS安装 vs2019编译python_OpenCV-contrib_13


由于没有WITH_CUDNN,因此就手动添加

python编译 VS安装 vs2019编译python_cudnn_14

然后点击configure

这一次configure 完成后

python编译 VS安装 vs2019编译python_cudnn_15

上面还有一些红色选项需要我们再次确认,因此接着再点击一次configure

这一次完成后所有选项全部变白了

python编译 VS安装 vs2019编译python_OpenCV-contrib_16


然后我们点击生成generate

等待生成完成

vs2019编译

在点击generate生成完成后,我们使用vs2019打开这个工程
由于本人需要的是release版本的,因此将debug改为release

python编译 VS安装 vs2019编译python_cuda_17


打开了工程后我们先不要急于生成,先单独运行这两个工程看看是否会成功

python编译 VS安装 vs2019编译python_OpenCV4.5_18


在我的电脑里运行时提示这个错误:unsupported Microsoft Visual Studio version!

python编译 VS安装 vs2019编译python_OpenCV4.5_19


这个是cuda的头文件不支持vs2019这么高的版本,我们打开提示错误的这个host_config.h文件,找到这个地方

python编译 VS安装 vs2019编译python_OpenCV-contrib_20


因为1920对应的就是vs2017,vs2019的数字大于这个,所有就报错,解决办法是把这个1920改大些,这里我改成2000

python编译 VS安装 vs2019编译python_OpenCV4.5_21


接下来可以右键ALL_BUILD->生成

python编译 VS安装 vs2019编译python_OpenCV-contrib_22


生成成功然后就可以右键Install 生成动态库和头文件

至此GPU版本的OpenCV编译完成。

那么这个Python版本的OpenCV是否已经安装了,实际上在点击install进行生成的时候,就已经把Python版本的OpenCV模块安装到Python环境中去了。

python编译 VS安装 vs2019编译python_cudnn_23


不过通过这种方式安装的Python版OpenCV通过pip list却无法显示出来,因为这个命令只能显示通过pip安装的模块,但是却是可以使用的。

python编译 VS安装 vs2019编译python_python编译 VS安装_24


OpenCV4.5的C++GPU库编译好了,接下来在vs2019中调用测试下看GPU库是否可以使用:

C++测试代码如下:

#include <iostream>
#include<opencv2/opencv.hpp>

int main(int argc, char* argv[])
{
    cv::cuda::GpuMat img(400, 600, CV_8UC3, cv::Scalar(255, 0, 0));
    cv::Mat cpuImg;
    img.download(cpuImg);
    cv::imshow("test", cpuImg);
    cv::waitKey(0);
    return 0;
}

运行成功,代表OpenCV环境编译正确。

python编译 VS安装 vs2019编译python_cudnn_25