python 的 OpenCV 3.2,Windows 中的 CUDA

OpenCV 3.2 for python with CUDA in Windows

我用 cmake 和 Visual Studio 构建了 opencv3.2 12 (2013) CUDA 支持和 python3.5。所有库都已成功构建,我可以使用 python.

运行 opencv 命令

这是命令的输出 print(cv2.getBuildInformation())

General configuration for OpenCV 3.2.0 =====================================
  Version control:               unknown

  Extra modules:
    Location (extra):            D:/OpenCV/opencv_contrib/modules
    Version control (extra):     unknown

  Platform:
    Timestamp:                   2017-06-09T14:07:41Z
    Host:                        Windows 10.0.14393 AMD64
    CMake:                       3.9.0-rc2
    CMake generator:             Visual Studio 12 2013 Win64
    CMake build tool:            C:/Program Files (x86)/MSBuild/12.0/bin/MSBuild.exe
    MSVC:                        1800

  C/C++:
    Built as dynamic libs?:      YES
    C++ Compiler:                D:/Program Files (x86)/Microsoft Visual Studio 12.0/VC/bin/x86_amd64/cl.exe  (ver 18.0.21005.1)
    C++ flags (Release):         /DWIN32 /D_WINDOWS /W4 /GR /EHa  /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /arch:AVX2 /Oi  /wd4127 /wd4251 /wd4324 /wd4275 /wd4589 /MP4  /MD /O2 /Ob2 /DNDEBUG  /Zi
    C++ flags (Debug):           /DWIN32 /D_WINDOWS /W4 /GR /EHa  /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /arch:AVX2 /Oi  /wd4127 /wd4251 /wd4324 /wd4275 /wd4589 /MP4  /MDd /Zi /Ob0 /Od /RTC1
    C Compiler:                  D:/Program Files (x86)/Microsoft Visual Studio 12.0/VC/bin/x86_amd64/cl.exe
    C flags (Release):           /DWIN32 /D_WINDOWS /W3  /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /arch:AVX2 /Oi    /MP4  /MD /O2 /Ob2 /DNDEBUG  /Zi
    C flags (Debug):             /DWIN32 /D_WINDOWS /W3  /D _CRT_SECURE_NO_DEPRECATE /D _CRT_NONSTDC_NO_DEPRECATE /D _SCL_SECURE_NO_WARNINGS /Gy /bigobj /arch:AVX2 /Oi    /MP4  /MDd /Zi /Ob0 /Od /RTC1
    Linker flags (Release):      /machine:x64  /INCREMENTAL:NO  /debug
    Linker flags (Debug):        /machine:x64  /debug /INCREMENTAL
    ccache:                      NO
    Precompiled headers:         YES
    Extra dependencies:          comctl32 gdi32 ole32 setupapi ws2_32 vfw32 C:/Users/Ramesh/Anaconda3/Library/lib/hdf5.lib cudart nppc nppi npps cublas cufft -LIBPATH:C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0/lib/x64
    3rdparty dependencies:       zlib libjpeg libwebp libpng libtiff libjasper IlmImf libprotobuf

  OpenCV modules:
    To be built:                 cudev core cudaarithm flann hdf imgproc ml reg surface_matching video cudabgsegm cudafilters cudaimgproc cudawarping dnn fuzzy imgcodecs photo shape videoio cudacodec highgui objdetect plot ts xobjdetect xphoto bgsegm bioinspired dpm face features2d line_descriptor saliency text calib3d ccalib cudafeatures2d cudalegacy cudaobjdetect cudaoptflow cudastereo datasets rgbd stereo superres tracking videostab xfeatures2d ximgproc aruco optflow phase_unwrapping stitching structured_light python3
    Disabled:                    world contrib_world
    Disabled by dependency:      -
    Unavailable:                 java python2 viz cnn_3dobj cvv freetype matlab sfm

  Windows RT support:            NO

  GUI:
    QT:                          NO
    Win32 UI:                    YES
    OpenGL support:              NO
    VTK support:                 NO

  Media I/O:
    ZLib:                        build (ver 1.2.8)
    JPEG:                        build (ver 90)
    WEBP:                        build (ver 0.3.1)
    PNG:                         build (ver 1.6.24)
    TIFF:                        build (ver 42 - 4.0.2)
    JPEG 2000:                   build (ver 1.900.1)
    OpenEXR:                     build (ver 1.7.1)
    GDAL:                        NO
    GDCM:                        NO

  Video I/O:
    Video for Windows:           YES
    DC1394 1.x:                  NO
    DC1394 2.x:                  NO
    FFMPEG:                      YES (prebuilt binaries)
      avcodec:                   YES (ver 57.64.101)
      avformat:                  YES (ver 57.56.100)
      avutil:                    YES (ver 55.34.100)
      swscale:                   YES (ver 4.2.100)
      avresample:                YES (ver 3.1.0)
    GStreamer:                   NO
    OpenNI:                      NO
    OpenNI PrimeSensor Modules:  NO
    OpenNI2:                     NO
    PvAPI:                       NO
    GigEVisionSDK:               NO
    DirectShow:                  YES
    Media Foundation:            NO
    XIMEA:                       NO
    Intel PerC:                  NO

  Parallel framework:            Concurrency

  Other third-party libraries:
    Use IPP:                     9.0.1 [9.0.1]
         at:                     D:/OpenCV/build2/3rdparty/ippicv/ippicv_win
    Use IPP Async:               NO
    Use Lapack:                  NO
    Use Eigen:                   YES (ver 3.3.3)
    Use Cuda:                    YES (ver 8.0)
    Use OpenCL:                  YES
    Use OpenVX:                  NO
    Use custom HAL:              NO

  NVIDIA CUDA
    Use CUFFT:                   YES
    Use CUBLAS:                  YES
    USE NVCUVID:                 NO
    NVIDIA GPU arch:             20 30 35 37 50 52 60 61
    NVIDIA PTX archs:
    Use fast math:               YES

  OpenCL:                        <Dynamic loading of OpenCL library>
    Include path:                D:/OpenCV/sources/3rdparty/include/opencl/1.2
    Use AMDFFT:                  NO
    Use AMDBLAS:                 NO

  Python 2:
    Interpreter:                 NO

  Python 3:
    Interpreter:                 C:/Users/Ramesh/Anaconda3/python.exe (ver 3.5.3)
    Libraries:                   C:/Users/Ramesh/Anaconda3/libs/python35.lib (ver 3.5.3)
    numpy:                       C:/Users/Ramesh/Anaconda3/lib/site-packages/numpy/core/include (ver 1.13.0)
    packages path:               C:/Users/Ramesh/Anaconda3/Lib/site-packages

  Python (for build):            C:/Users/Ramesh/Anaconda3/python.exe

  Java:
    ant:                         NO
    JNI:                         C:/Program Files/Java/jdk1.8.0_112/include C:/Program Files/Java/jdk1.8.0_112/include/win32 C:/Program Files/Java/jdk1.8.0_112/include
    Java wrappers:               NO
    Java tests:                  NO

  Matlab:                        Matlab not found or implicitly disabled

  Documentation:
    Doxygen:                     D:/Program Files/doxygen/bin/doxygen.exe (ver 1.8.13)

  Tests and samples:
    Tests:                       NO
    Performance tests:           NO
    C/C++ Examples:              NO

  Install path:                  D:/OpenCV/build2/install

  cvconfig.h is in:              D:/OpenCV/build2
-----------------------------------------------------------------



但是我不能使用 cv2.cuda 包中的函数。当我运行help(cv2.cuda)

Help on module cv2.cuda in cv2:

NAME
    cv2.cuda

DATA
    SURF_CUDA_ANGLE_ROW = 5
    SURF_CUDA_HESSIAN_ROW = 6
    SURF_CUDA_LAPLACIAN_ROW = 2
    SURF_CUDA_OCTAVE_ROW = 3
    SURF_CUDA_ROWS_COUNT = 7
    SURF_CUDA_SIZE_ROW = 4
    SURF_CUDA_X_ROW = 0
    SURF_CUDA_Y_ROW = 1

FILE
    (built-in)

结果说模块中没有函数cv2.cuda


我的问题是,

  1. 有没有办法编译 opencv3.2CUDA 支持 python3.5..?正如 this 问题中所述,在 opencv 2.4.7
  2. 中是不可能的
  3. 如果没有办法,我可以将c++函数绑定到python..吗?我经历了 opencv doc,我无法理解如何将新模块扩展到 python。当我 google 它时,我得到了一些关于编写包装器的答案(所有答案都超过 4 年)但是我不明白如何在 2 种语言之间绑定数据结构,比如 c++ Matnumpy.ndarray.

任何帮助将不胜感激!!

我能够按照 here 中的教程找到获得 cudaOpenCV python 支持的方法(我没有对此进行测试)。据我所知 GPUMat 不可用。但是 UMat 可用于 python 可用于访问 OpenCL.
答案中所述,UMat

A unified abstraction cv::UMat that enables the same APIs to be implemented using CPU or OpenCL code, without a requirement to call OpenCL accelerated version explicitly. These functions use an OpenCL-enabled GPU if exists in the system, and automatically switch to CPU operation otherwise.

OpenCL 部分 here 中所述,您只需将普通矩阵(在 python np.ndarrays 中)更改为 UMats(在python cv2.UMat) 以获得 OpenCL 支持。

但是当我需要 cuda 支持时我所做的是,我在 c++ 中将该部分写为函数并提供 cuda 支持。我使该函数以 cv::Mat 图像作为参数,并以 return cv::Mat 作为结果。

然后按照 here 所述为该函数编写一个 python 包装器。
那是有点旧的代码。但它对我有用 python 3.5python 2.7OpenCV 3.4