无法使用 opencv cuda 调用

Posted

技术标签:

【中文标题】无法使用 opencv cuda 调用【英文标题】:Unable to use opencv cuda calls 【发布时间】:2016-05-24 14:23:37 【问题描述】:

在我的 tk1 板上全新安装 jetpack 后,我发现自己无法使用 opencv 的 gpu 调用。我正在使用 opencv 2.4.12

OpenCV Error: Gpu API call (CUDA driver version is insufficient for CUDA runtime version) in copy, file /hdd/buildbot/slave_jetson_tx_2/35-O4T-L4T-Jetson-L/opencv/modules/dynamicuda/include/opencv2/dynamicuda/dynamicuda.hpp, line 877
Error: /hdd/buildbot/slave_jetson_tx_2/35-O4T-L4T-Jetson-L/opencv/modules/dynamicuda/include/opencv2/dynamicuda/dynamicuda.hpp:877: error: (-217) CUDA driver version is insufficient for CUDA runtime version in function copy

这是 nvcc -V 的输出

ubuntu@tegra-ubuntu:~$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2014 NVIDIA Corporation
Built on Wed_Nov_12_15:57:57_CST_2014
Cuda compilation tools, release 6.5, V6.5.30

.bashrc

# Add CUDA bin & library paths:
export PATH=/usr/local/cuda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
# Add CUDA bin & library paths:
export PATH=/usr/local/cuda/bin:/usr/local/cuda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
export LD_LIBRARY_PATH=/usr/local/cuda/lib:

注意:我之前安装了 cuda 7.0,没有安装它,我只是安装了 6.5 的 deb 文件。 nvcc -V 显示我正在使用 6.5,但它可能仍在使用 7.0?

这是我要编译的内容和我使用的编译命令

g++ `pkg-config --cflags opencv` Fix.cpp -o Saliency `pkg-config --libs opencv`

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

int main (int argc, char* argv[])

    try
    
        cv::Mat src_host = cv::imread("file.png", CV_LOAD_IMAGE_GRAYSCALE);
        cv::gpu::GpuMat dst, src;
        src.upload(src_host);

        cv::gpu::threshold(src, dst, 128.0, 255.0, CV_THRESH_BINARY);

        cv::Mat result_host(dst);
        cv::imshow("Result", result_host);
        cv::waitKey();
    
    catch(const cv::Exception& ex)
    
        std::cout << "Error: " << ex.what() << std::endl;
    
    return 0;

【问题讨论】:

“CUDA 驱动程序版本不足以满足 CUDA 运行时版本”的意思。你有一个不匹配的环境。我的猜测是,当您安装了更新的 CUDA 工具包版本(例如,7.0)时,您构建了您的 OpenCV,然后当您安装了 jetpack,事情(CUDA 驱动程序、CUDA 运行时、CUDA 工具包)恢复到有效的 6.5 版本。这意味着针对 CUDA 7.0 构建的任何库(例如 OpenCV 库)都不再可用。我的猜测是您需要针对当前环境重建 OpenCV。 @Zypps987:请添加您的解决方案作为答案 【参考方案1】:

添加 CW 答案以将其从未回答列表中删除。根据 OP 的评论,这个建议似乎带来了解决方案:

“CUDA 驱动程序版本不足以满足 CUDA 运行时版本”的意思。你有一个不匹配的环境。

我的猜测是,当您安装了更新的 CUDA 工具包版本(例如,7.0)时,您构建了 OpenCV,然后当您安装了 jetpack,事情恢复(CUDA 驱动程序、CUDA 运行时、CUDA 工具包)有效6.5 版本。这意味着针对 CUDA 7.0 构建的任何库(例如 OpenCV 库)都不再可用。

我的猜测是您需要针对当前环境重建 OpenCV。

【讨论】:

以上是关于无法使用 opencv cuda 调用的主要内容,如果未能解决你的问题,请参考以下文章

无法在 RHEL 7 上使用 CUDA 构建 OpenCV

getCudaEnabledDeviceCount() 返回 -1:使用 vcpkg 构建的 OpenCV [cuda]

在matlab中调用时无法在C++中使用opencv读取图像

Kotlin/Anko/OpenCV/CameraView 无法创建处理程序,因为线程尚未调用 Looper.prepare()

如何在 CUDA 内核中正确操作 CV_16SC3 Mat

windows11编译OpenCV4.5.0 with CUDA(附注意事项)