写在前面:安装成功的各版本号
ubuntu 18.04
opencv 3.4.3 (无论是下载opencv还是opencv contrib都记得在github分支下找到对应版本的源码)
CUDA 10.2
首先需要已经安装好NVIDIA驱动和CUDA,其次还需要opencv的拓展包contrib,将下载好的contrib放入opencv文件夹中,重新编译。
最开始,我的CUDA版本是11.2,opencv3.4.3,按照网上其他教程,对opencv重新编译

cmake -D CMAKE_INSTALL_PREFIX=/usr/local -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=ON -D ENABLE_CXX11=1 -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules -D OPENCV_ENABLE_NONFREE=True -D INSTALL_PYTHON_EXAMPLES=ON -D INSTALL_C_EXAMPLES=ON -D WITH_CUDA=ON -D WITH_TBB=ON -D ENABLE_FAST_MATH=1 -D WITH_OPENMP=ON -D WITH_CUFFT=ON -D WITH_CUBLAS=ON ..

注意-D OPENCV_EXTRA_MODULES_PATH=…/opencv_contrib/modules参数中contrib的位置

  • ippicv报错

ippicv也需要自己根据版本号下载github官网,将压缩包解压后放到opencv/opencv-3.4.3/build/3rdparty/ippicv文件夹下面

  • boostdesc_bgm_bi.i等下载出错

在cmake过程中遇到类似的下载,因为一些大家都懂的原因没有办法真正下载成功,因此需要手动添加进去

– xfeatures2d/boostdesc: Download: boostdesc_bgm_bi.i
– xfeatures2d/vgg: Download: vgg_generated_48.i

因此我把需要添加的几个文件放在了百度网盘:
链接: https://pan.baidu.com/s/17SkrbfCRZYCqyxstGC6GMg
提取码: mdjw
文件格式如下
在这里插入图片描述将这几个文件放入opencv/opencv_contrib/modules/xfeatures2d/src
到这里cmake可以正常进行
然后make时又有了新的问题

  • cannot find -ltrue

报错如下:
在这里插入图片描述

/usr/bin/ld: cannot find -ltrue

我就在网上复制粘贴了这句话,相似的报错解决方法并没有用,最后的最后,我换成了CUDA 10.2版本,这个错误没了,,,竟然就这样解决了,,,
原因不清楚,不知道为什么不兼容,可能是cuda11.2版本太新了吧。

  • fatal error: dynlink_nvcuvid.h

版本问题解决了以后,编译过程中可能还会遇到另一个错误:

/home/xxx/library_codes/opencv/modules/cudacodec/src/precomp.hpp:60:18: fatal error: dynlink_nvcuvid.h: No such file or directory
#include <dynlink_nvcuvid.h>

在这里插入图片描述

  1. 下载NVIDIA-SDK

下载地址
下载完成之后解压缩,文件路径Video_Codec_SDK_8.2.16->Samples->NvCodec->NvDecoder,将其中的nvcuvid.h, cuviddec.h两个文件放到/usr/local/cuda/include/中

  1. 进入报错提醒的文件中
    将下述代码进行修改
#if CUDA_VERSION >= 9000
        #include <dynlink_nvcuvid.h>
    #else
        #include <nvcuvid.h>
    #endif

修改成这样

#if CUDA_VERSION >= 9000 && CUDA_VERSION < 10000 
        #include <dynlink_nvcuvid.h>
    #else
        #include <nvcuvid.h>
    #endif

共有五个报错文件,precomp.hpp/cuvid_video_source.hpp/frame_queue.hpp/video_decoder.hpp/video_parser.hpp

  • ‘linemod’ was not declared

在编译即将完成时候出现的错误:

In file included from /home/dan/tools/opencv/build/modules/python_bindings_generator/pyopencv_custom_headers.h:6:0,
                 from /home/dan/tools/opencv/modules/python/src2/cv2.cpp:1532:
/home/dan/tools/opencv/opencv_contrib/modules/rgbd/misc/python/pyopencv_linemod.hpp:4:40: error: ‘linemod’ was not declared in this scope
 template<> struct pyopencvVecConverter<linemod::Match>

只需要clean build以后,重新编译一遍就好了

至此应该没有其他错了

装好之后可以用以下代码测试一下:
CMakeLists.txt :

# cmake needs this line
cmake_minimum_required(VERSION 2.8)
 
# Define project name
project(test)
# Find OpenCV, you may need to set OpenCV_DIR variable
# to the absolute path to the directory containing OpenCVConfig.cmake file
# via the command line or GUI
#set(OpenCV_DIR "/home/karry/library_codes/opencv/build-c")
find_package(OpenCV 3 REQUIRED)
 
# If the package has been found, several variables will
# be set, you can find the full list with descriptions
# in the OpenCVConfig.cmake file.
# Print some message showing some of them
message(STATUS "OpenCV library status:")
message(STATUS "    version: ${OpenCV_VERSION}")
message(STATUS "    libraries: ${OpenCV_LIBS}")
message(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}")
 
if(CMAKE_VERSION VERSION_LESS "2.8.11")
  # Add OpenCV headers location to your include paths
  include_directories(${OpenCV_INCLUDE_DIRS})
endif()
 
# Declare the executable target built from your sources
add_executable(opencv_example main.cpp)
 
# Link your application with OpenCV libraries
target_link_libraries(opencv_example ${OpenCV_LIBS})
 

main.cpp :

using namespace std;
#include "opencv2/opencv.hpp"
#include "opencv2/core/cuda.hpp"
using namespace cv;
 
int main()
{
    int num_devices = cv::cuda::getCudaEnabledDeviceCount();//得到已安装CUDA设备的数量
 
    cout<<num_devices<<endl;
}

输出为1则表示安装成功,如果此时Opencv仍不支持CUDA则会输出0

Logo

欢迎来到FlagOS开发社区,这里是一个汇聚了AI开发者、数据科学家、机器学习爱好者以及业界专家的活力平台。我们致力于成为业内领先的Triton技术交流与应用分享的殿堂,为推动人工智能技术的普及与深化应用贡献力量。

更多推荐