Ubuntu20.04编译opencv3.4.9 with CUDA10.2 support
先前在编译opencv的时候,没有CUDA支持,本文介绍了opencv3.4.9添加CUDA支持的编译过程。
OPENCV使用CUDA的文档可以参考:https://docs.opencv.org/3.4.9/da/d2c/tutorial_table_of_content_gpu.html
编译前的准备工作:;
-
从nvidia官网上下载Video_Codec_SDK,下载地址为
https://developer.nvidia.com/designworks/video_codec_sdk/downloads/v8.2-ga2
-
解压其中的
Video_Codec_SDK_8.2.16/Samples/NvCodec/NvDecoder
中的两个头文件cuviddec.h
和nvcuvid.h
,并将其放在/usr/local/cuda/include/
路径下。 -
分别修改以下文件:
/path/to/opencv3.4.9/sources/modules/cudacodec/src/precomp.hpp
/path/to/opencv3.4.9/sources/modules/cudacodec/src/cuvid_video_source.hpp
/path/to/opencv3.4.9/sources/modules/cudacodec/src/video_decoder.hpp
/path/to/opencv3.4.9/sources/modules/cudacodec/src/video_parser.hpp
/path/to/opencv3.4.9/sources/modules/cudacodec/src/frame_queue.hpp
将其中的#if CUDA_VERSION >= 9000
改为 #if CUDA_VERSION >= 9000 && CUDA_VERSION < 10000
编译过程
打开cmake-gui。配置source和build分别为:
/home/wyx/software/opencv3.4.9/sources
和/home/wyx/software/opencv3.4.9/build/x64/LinuxBuildCUDA
其中LinuxBuildCUDA文件夹需要自己创建
随后按照以下流程:
点击Configure,选择gcc和g++编译器为7.x版本,一般是/usr/bin/gcc-7
和/usr/bin/g++-7
WITH_CUDA
: 勾选
WITH_CUBLAS
: 勾选
CUDA_FAST_MATH
: 勾选
ENABLE_FAST_MATH
: 勾选
CUDA_GENERATION
: 选择Turing,不同的显卡具有不同的架构,在我的电脑上面是GTX 1650,图灵架构,因此选择Turing。
在第一次点击Configure后,最好留意一下缺失哪些库,缺失的库根据自己的需要选择安装。比如tesseract在我的环境下是用不上的,我就取消勾选了。
随后再次点击Configure,再点击Generate。
执行以下命令编译:
$ cd /home/wyx/software/opencv3.4.9/build/x64/LinuxBuildCUDA
$ make
因为加入了cuda,这个编译过程相当漫长,可能需要几个小时。
编译完成之后,看你的环境是否需要对编译的结果进行安装,安装使用以下命令:
$ sudo make install
注意,这一步操作会覆盖掉你本地安装的其他opencv版本,比如在我的环境下就覆盖掉了先前的opencv without cuda版本。
How to use opencv-cuda in vscode
实际上由于opencv-cuda已经被安装了,所以vscode里面针对opencv-cuda的编译链接的过程和一般的cpp文件编译链接过程一样-lopencv_world
参数大法好。
示例文件:
// opencv_cuda.cpp
#include <opencv2/core/cuda.hpp>
#include <iostream>
using namespace std;
int main()
{
int gpu_count = cv::cuda::getCudaEnabledDeviceCount();
cout << gpu_count << endl;
return 0;
}