Opencv错误:没有GPU支持(库没有编译CUDA支持)

8
我正在尝试在GPU上使用CUDA和OpenCV进行图像处理任务。我使用的是Ubuntu系统,已经成功安装了Opencv和Cuda。但是,当我尝试在Eclipse中运行样例代码时,出现了以下错误:OpenCV Error: No GPU support (The library is compiled without CUDA support) in mallocPitch, file /home/muad/Source/OpenCV-2.4.2/modules/core/src/gpumat.cpp, line 749 我重新编译了Opencv,但仍然出现相同的错误。请帮我解决这个问题。

嗯,我建议重新编译OpenCV,并确保支持CUDA。 - pedr0
4
为启用CUDA支持,请使用WITH_CUDA=ON在CMake中配置OpenCV。当该标志被设置且CUDA已安装时,将构建完整功能的OpenCV GPU模块。 - Robert Crovella
4个回答

7
如文档所述,您需要使用CMake构建OpenCV并设置WITH_CUDA=ON标志。然后您将获得完整功能的OpenCV GPU模块。否则,该模块仍将被构建,但您将收到一个CV_GpuNotSupported异常。
更多信息,请阅读此处:http://docs.opencv.org/modules/gpu/doc/introduction.html

好的,我解决了这个问题:我的机器无法看到CUDA,因为我忘记将导出命令添加到bashrc文件中。现在我要重新编译OpenCV,希望不会遇到任何问题。 - Barkan Can Erdogdu
好的,那基本上就是我和Robert Crovella所说的,即你没有正确构建你的GPU模块。很高兴听到你解决了你的问题。 - Maecky
1
这里有一个关于如何传递标志的好 gist : https://gist.github.com/raulqf/f42c718a658cddc16f9df07ecc627be7 - yuqli
如何在Windows 10中将导出命令添加到bashrc文件? - mero
请注意,如果您试图编译 WITH_CUDA=ON 并出现以下错误:CUDA: OpenCV requires enabled 'cudev' module from 'opencv_contrib' repository: https://github.com/opencv/opencv_contrib,则需要使用额外的模块(特别是 cudev 模块)构建 OpenCV。完成此操作的说明可从上述错误消息中的 GitHub 链接的 README 中获得。 - Matt Popovich

1

我曾经遇到过同样的问题。我通过将 E:\opencv\build\gpu\x64\vc10\lib 文件夹中的 opencv_core243d.dll 复制到带有 .exe 的工作目录中来解决了这个问题。虽然不知道为什么会有用,但确实有效。


1
我猜测您的系统路径仍然设置为之前未使用GPU编译的dll。在重新构建OpenCV后,您应该先更改系统路径。

有没有办法可以找出库是使用 WITH_CUDA 标志构建的? - Swaroop
如何在Windows 10中实现此操作 - mero

1
如果有人在尝试在Google Colab上运行笔记本时遇到相同的问题,那么这就是我解决它的方法。
我尝试了很多方法,并发现了这篇博客: https://towardsdatascience.com/how-to-use-opencv-with-gpu-on-colab-25594379945f 该博客介绍了如何构建带有CUDA支持的OpenCV,然后将最终构建文件(*.so)放置到Colab工作目录中,以便通过它访问和运行OpenCV。
即使我完成了所有步骤,问题仍没有得到解决,因为Colab预装了OpenCV,需要在使用编译版本之前将其删除
因此,这里是我采取的所有步骤,以在Google Colab上使用CUDA支持运行OpenCV。
将以下步骤翻译成中文:
  1. 在Colab运行时启用GPU。通过在“查看资源”选项中选择“更改运行时类型”,然后在硬件加速器选项下选择“GPU”。
  2. 将您的Google驱动器挂载到Colab中。这可以通过在“文件”选项卡中选择“挂载驱动器”选项来轻松完成,从而连接您的驱动器。此步骤很重要,因为我们需要将构建文件保留在某个位置,以便在将来使用它。
  3. 在笔记本中运行以下命令以检查“cv2”当前版本
    import cv2
    cv2.__version__
  4. 在笔记本中运行以下代码,该代码将下载并构建支持CUDA的OpenCV
    %cd /content
    !git clone https://github.com/opencv/opencv
    !git clone https://github.com/opencv/opencv_contrib
    !mkdir /content/build
    %cd /content/build
    !cmake -DOPENCV_EXTRA_MODULES_PATH=/content/opencv_contrib/modules -DBUILD_SHARED_LIBS=OFF -DBUILD_TESTS=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_EXAMPLES=OFF -DWITH_OPENEXR=OFF -DWITH_CUDA=ON -DWITH_CUBLAS=ON -DWITH_CUDNN=ON -DOPENCV_DNN_CUDA=ON /content/opencv
    !make -j8 install
    这将需要很长时间才能运行。我花了4个小时才完成。请耐心等待!
  5. 构建文件完成后,我们需要将此构建文件复制到我们的Google驱动器中。可以使用以下命令来执行此操作。我复制了整个文件夹,您不需要这样做,只需输出文件“build/lib/python3/cv2.cpython-37m-x86_64-linux-gnu.so”即可。
    !mkdir "/content/drive/MyDrive/"
    !cp -R /content/build "/content/drive/MyDrive/"
  6. 现在终止会话并重新启动运行时。这将清除所有文件,并使我们拥有一个新的运行时。
  7. 重新挂载与步骤2相同的google驱动器。
  8. 使用以下命令卸载预安装的OpenCV。
    !pip uninstall opencv-python
  9. 将'cv2.cpython-37m-x86_64-linux-gnu.so'文件复制到您当前的工作目录中
    !cp "/content/drive/MyDrive/build/lib/python3/cv2.cpython-37m-x86_64-linux-gnu.so" .
  10. 检查OpenCV版本。它的版本号应该带有类似“-pre”或“-dev”的后缀。在我的情况下,它是“4.5.5-dev”。
这就是全部内容。如果您在从 Google Drive 复制文件时使用其他位置,请确保在文件路径中进行适当更改并复制到正确的位置。
如果您认为我漏掉了什么或有错误,请告诉我。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接