引言
本文将重点介绍在
Windows上从源文件以及其他
CUDA 10模块组装和安装
C / C ++ ,
Python 2和
Python 3的
OpenCV 4的方法 。
我试图将所有在安装过程中可能遇到的细微之处和细微之处都包括在内,而这些都没有写在
正式手册中 。

对该组件进行了以下测试:
- Windows 8.1 + Visual Studio 2017 + Python 2/3 + CUDA 10.0 + GeForce 840米
- Windows 10 + Visual Studio 2019 + Python 2/3 + CUDA 10.0 + GeForce GTX 1060
注意! 该构建不适用于
OpenCV 4.0.1版本和/或低于10版本的
CUDA 。
OpenCV 3支持
CUDA 9及以下版本。
您需要安装什么
我的程序集中使用了以下工具:
- CMake的3.15
- 适用于Windows的 MS Visual Studio 2019 64位+ CMake C ++工具
- Python 3.7.3 64位+ NumPy 64位
- Python 2.7.16 64位+ NumPy 64位
- CUDA 10.0
- CuDNN 7.6.2
- OpenCV 4.1.1和OpenCV-contrib-4.1.1
安装方式
由于安装是通过控制台命令完成的,因此您应该仔细,准确地执行所有步骤。 另外,如有必要,将安装路径更改为您自己的安装路径。
首先,您需要安装必需的软件,并且必须在
CUDA之前安装
Visual Studio :
安装所有组件后,请确保
分别在变量
PATH,PYTHONPATH,CUDA_PATH和
cudnn 中写入
CMake,Visual Studio,Python,CUDA,CuDNN的
路径 。
接下来,将
opencv-4.1.1和
opencv-contrib-4.1.1源档案下载到所需位置(在我的情况下,这是
C:\ OpenCV \ )。
git clone https://github.com/opencv/opencv.git -b "4.1.1" git clone https://github.com/opencv/opencv_contrib.git -b "4.1.1"

在opencv-4.1.1。中创建
build /文件夹。

接下来,我们使用
cmake生成程序集文件。 我们将使用
cmake的控制台版本,因为
cmake-gui会混淆某些变量的类型(例如
OPENCV_PYTHON3_VERSION ),并因此错误地生成文件。
我们沿着路径
C:\ OpenCV \打开控制台并注册变量。
set "opencvSource=opencv-4.1.1" set "opencvExtraModules=opencv_contrib-4.1.1/modules" set "opencvBuild=%opencvSource%\build" set "compiler=Visual Studio 16 2019" set "buildType=Release"
注意事项 对于
Visual Studio 2017,生成器被编写为“
Visual Studio 15 2017 Win64 ”,并且不
带有 -A标志。
您还可以为python 2和python 3显式指定Python库,以防收集器无法自动找到它们。
set "python2_executable=C:/Python27/python.exe" set "python2_include_dir=C:/Python27/include" set "python2_library=C:/Python27/libs/python27.lib" set "python2_numpy_include_dirs=C:/Python27/Lib/site-packages/numpy/core/include" set "python2_packages_path=C:/Python27/Lib/site-packages" set "python3_executable=C:/Users/root/Anaconda3/python.exe" set "python3_include_dir=C:/Users/root/Anaconda3/include" set "python3_library=C:/Users/root/Anaconda3/libs/python37.lib" set "python3_numpy_include_dirs=C:/Users/root/Anaconda3/lib/site-packages/numpy/core/include" set "python3_packages_path=C:/Users/root/Anaconda3/Lib/site-packages"
注意事项 请注意,
NumPy库的位深度必须与
OpenCV相同。 检查出来很容易:
import numpy.distutils.system_info as sysinfo print(sysinfo.platform_bits)
使用下面的long命令生成程序集文件。 如果执行命令后生成失败或出现错误,则应通过清除
build /和
.cache /中的所有文件来执行重复生成。
cmake ^ -B"%opencvBuild%/" ^ -H"%opencvSource%/" ^ -G"%compiler%" ^ -Ax64 ^ -DCMAKE_BUILD_TYPE=%buildType% ^ -DBUILD_opencv_world=ON ^ -DINSTALL_TESTS=OFF ^ -DINSTALL_C_EXAMPLES=OFF ^ -DBUILD_EXAMPLES=OFF ^ -DOPENCV_EXTRA_MODULES_PATH="%opencvExtraModules%/" ^ -DBUILD_PROTOBUF=ON ^ -DBUILD_opencv_python_bindings_generator=ON ^ -DWITH_CUDA=ON ^ -DCUDA_FAST_MATH=ON ^ -DWITH_CUBLAS=ON ^ -DCUDA_ARCH_PTX=7.5 ^ -DBUILD_opencv_python2=ON ^ -DPYTHON2_EXECUTABLE="%python2_executable%" ^ -DOPENCV_PYTHON2_VERSION=2.7.16 ^ -DPYTHON2_INCLUDE_DIR="%python2_include_dir%" ^ -DPYTHON2_LIBRARY="%python2_library%" ^ -DPYTHON2_NUMPY_INCLUDE_DIRS="%python2_numpy_include_dirs%" ^ -DPYTHON2_PACKAGES_PATH="%python2_packages_path%" ^ -DBUILD_opencv_python3=ON ^ -DPYTHON3_EXECUTABLE="%python3_executable%" ^ -DOPENCV_PYTHON3_VERSION=3.7.3 ^ -DPYTHON3_INCLUDE_DIR="%python3_include_dir%" ^ -DPYTHON3_LIBRARY="%python3_library%" ^ -DPYTHON3_NUMPY_INCLUDE_DIRS="%python3_numpy_include_dirs%" ^ -DPYTHON3_PACKAGES_PATH="%python3_packages_path%"
一些标志的含义- BUILD_opencv_world-一个可选模块,其中包含在安装过程中选择的所有库的副本。 这在用C ++开发时很有用,因为您可以将一个opencv_world411.lib依赖关系连接到项目,而不是连接一堆opencv依赖关系。
- INSTALL_EXAMPLES / INSTALL_TESTS-安装opencv代码示例/测试
- CUDA_FAST_MATH,WITH_CUBLAS- CUDA的附加模块,旨在加快计算速度
- CUDA_ARCH_PTX- PTX指令版本,可提高计算性能
- OPENCV_EXTRA_MODULES_PATH-从opencv-contrib到其他模块的路径(对于CUDA是必需的)
- BUILD_PROTOBUF-为了使某些opencv模块正常工作,需要Protobuf( 无论如何 , opencv收集器都会将BUILD_PROTOBUF设置为ON )
大约10分钟后,组装信息以及最后一行“
配置完成 ”和“
生成完成 ”应出现在控制台中。 我们检查所有信息,尤其是
NVIDIA CUDA,Python 2,Python 3的各个部分 。

接下来,我们收集解决方案。 根据您的处理器和
Visual Studio的版本,可能要花费几个小时来构建。
cmake --build %opencvBuild% --target ALL_BUILD --config Release
安装解决方案。
cmake --build %opencvBuild% --target INSTALL --config Release
成功安装后,使用值
C:\ OpenCV \ opencv-4.1.1 \ build \ install \ x64 \ vc15 \ bin创建
OPENCV_DIR系统变量,并将其添加到
PATH中 。
测验
我们将使用一个简单的矩阵乘法示例,使用
CUDA模块测试
OpenCV的功能。
将OpenCV连接到Visual Studio项目- 设置版本/ x64构建类型(对于Debug,使用Debug标志构建OpenCV)
- 项目属性→C / C ++→常规→将行“ C:\ OpenCV \ opencv-4.1.1 \ build \ install \ include”添加到“其他包含目录”
- 项目属性→链接器→常规→将行“ C:\ OpenCV \ opencv-4.1.1 \ build \ install \ x64 \ vc16 \ lib”添加到其他库目录
- 项目属性→链接程序→常规→将“; opencv_world411.lib”(“; opencv_world411d.lib用于调试”)添加到其他依赖项的末尾
Python 3范例 import numpy as np import cv2 as cv import time rand = np.random.random((1024, 1024)).astype(np.float32) h_array1 = np.stack([rand, rand],axis=2) h_array2 = h_array1 d_array1 = cv.cuda_GpuMat() d_array2 = cv.cuda_GpuMat() d_array1.upload(h_array1) d_array2.upload(h_array2) start = time.time() cv.cuda.gemm(d_array1, d_array2, 1, None, 0, None, 1) end = time.time() print("Time elapsed:", end - start, "sec")
控制台输出
Time elapsed: 0.3130002021789551
C ++示例 #include <iostream> #include <opencv2/opencv.hpp> #include <opencv2/cudaarithm.hpp> using namespace std; using namespace cv; using namespace cv::cuda; int main() { Mat h_array1 = Mat::ones(1024, 1024, CV_32FC2); Mat h_array2 = Mat::ones(1024, 1024, CV_32FC2); Mat h_array3 = Mat::zeros(1024, 1024, CV_32FC2); Mat h_result; GpuMat d_array1, d_array2, d_array3, d_result; d_array1.upload(h_array1); d_array2.upload(h_array2); const clock_t begin_time = clock(); cuda::gemm(d_array1, d_array2, 1.0, d_array3, 0.0, d_result); cout << "Time elapsed: " << (float(clock() - begin_time) / CLOCKS_PER_SEC) << " sec" << endl; d_result.download(h_result); return 0; }
控制台输出
Time elapsed: 0.354
删掉
要删除
OpenCV ,您需要运行命令。
cmake --build %opencvBuild% --target uninstall --config Release
并删除
OPENCV_DIR系统变量,并从
PATH中删除指向OpenCV的
路径 。
结论
在本文中,我们检查了
Windows 10的
OpenCV 4的安装。 该算法已在
Windows 8.1和
Windows 10上进行了测试,但从理论上讲,它可以在
Windows 7上构建。 有关更多信息,请参见下面的资源列表。
PS最后,我们将所有安装命令合并到一个
.bat文件中,以供那些想要自动执行安装的用户使用。
install_opencv411.bat cd C:\OpenCV git clone https://github.com/opencv/opencv_contrib.git -b "4.1.1" git clone https://github.com/opencv/opencv.git -b "4.1.1" ren opencv opencv-4.1.1 ren opencv_contrib-4.1.1 set "opencvSource=opencv-4.1.1" set "opencvExtraModules=opencv_contrib-4.1.1/modules" set "opencvBuild=%opencvSource%\build" set "compiler=Visual Studio 16 2019" set "buildType=Release" set "python2_executable=C:/Python27/python.exe" set "python2_include_dir=C:/Python27/include" set "python2_library=C:/Python27/libs/python27.lib" set "python2_numpy_include_dirs=C:/Python27/Lib/site-packages/numpy/core/include" set "python2_packages_path=C:/Python27/Lib/site-packages" set "python3_executable=C:/Users/root/Anaconda3/python.exe" set "python3_include_dir=C:/Users/root/Anaconda3/include" set "python3_library=C:/Users/root/Anaconda3/libs/python37.lib" set "python3_numpy_include_dirs=C:/Users/root/Anaconda3/lib/site-packages/numpy/core/include" set "python3_packages_path=C:/Users/root/Anaconda3/Lib/site-packages" cmake ^ -B"%opencvBuild%/" ^ -H"%opencvSource%/" ^ -G"%compiler%" ^ -Ax64 ^ -DCMAKE_BUILD_TYPE=%buildType% ^ -DBUILD_opencv_world=ON ^ -DINSTALL_TESTS=OFF ^ -DINSTALL_C_EXAMPLES=OFF ^ -DBUILD_EXAMPLES=OFF ^ -DOPENCV_EXTRA_MODULES_PATH="%opencvExtraModules%/" ^ -DBUILD_PROTOBUF=ON ^ -DBUILD_opencv_python_bindings_generator=ON ^ -DWITH_CUDA=ON ^ -DCUDA_FAST_MATH=ON ^ -DWITH_CUBLAS=ON ^ -DCUDA_ARCH_PTX=7.5 ^ -DBUILD_opencv_python2=ON ^ -DPYTHON2_EXECUTABLE="%python2_executable%" ^ -DOPENCV_PYTHON2_VERSION=2.7.16 ^ -DPYTHON2_INCLUDE_DIR="%python2_include_dir%" ^ -DPYTHON2_LIBRARY="%python2_library%" ^ -DPYTHON2_NUMPY_INCLUDE_DIRS="%python2_numpy_include_dirs%" ^ -DPYTHON2_PACKAGES_PATH="%python2_packages_path%" ^ -DBUILD_opencv_python3=ON ^ -DPYTHON3_EXECUTABLE="%python3_executable%" ^ -DOPENCV_PYTHON3_VERSION=3.7.3 ^ -DPYTHON3_INCLUDE_DIR="%python3_include_dir%" ^ -DPYTHON3_LIBRARY="%python3_library%" ^ -DPYTHON3_NUMPY_INCLUDE_DIRS="%python3_numpy_include_dirs%" ^ -DPYTHON3_PACKAGES_PATH="%python3_packages_path%" cmake --build %opencvBuild% --target ALL_BUILD --config Release cmake --build %opencvBuild% --target INSTALL --config Release
来源清单
- docs.opencv.org/4.1.1/d3/d52/tutorial_windows_install.html
- www.learnopencv.com/install-opencv-4-on-windows
- jamesbowley.co.uk/build-opencv-4-0-0-with-cuda-10-0-and-intel-mkl-tbb-in-windows
- lightbuzz.com/opencv-cuda
- 《使用OpenCV和CUDA进行GPU加速的计算机视觉动手》一书中的“从源代码构建库”一章