opencv+cuda 编译

Posted PyPro

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了opencv+cuda 编译相关的知识,希望对你有一定的参考价值。

编译opencv4.2 + cuda10.2遇到无数坑,(环境是ubuntu18.04/opencv4.2+cuda10.1)各种版本不兼容的问题令人非常头大,网上资料又非常少(这里推荐一个搜索引擎www.bing.com),尝试了无数天外飞仙的攻略,也重装了无数次系统,想到opencv是基于FFmpeg实现的,而FFmpeg对于cuda的兼容相对opencv要求低一些,于是决定尝试编译FFmpeg+cuda,最终也成功的完成了opencv-4.2+cuda10.2的两个最新版本的编译。


编译环境:

Ubuntu18.04 + FFmpeg8.1 + cuda10.2

驱动:

Ubuntu18自代nvidia-440




从git上下载ffmpeg源码:

git clone https://git.videolan.org/git/ffmpeg/nv-codecheaders.git


安装ffnvcodec:

cd nv-codec-headers && sudo make install && cd –


ffmpeg公共存储库:

git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg/


依赖:

sudo apt-get install build-essential yasm cmake libtool libc6 libc6-dev unzip wget libnuma1 libnuma-dev


配置:

./configure --enable-nonfree -–enable-cuda-sdk –enable-libnpp -- extra-cflags=-I/usr/local/cuda/include --extra-ldflags=- L/usr/local/cuda/lib64


这里需要根据本机的线程数量进行编译,查看线程数量的命令:

grep 'processor' /proc/cpuinfo | sort -u | wc -l


开始编译:

make -j 12(线程数量)


最后安装:

sudo make install


测试脚本:

import cv2

capture = cv2.VideoCapture("rtsp://流的用户名:流密码@流IP")

# 如果是本机摄像头则 cv2.VideoCapture(0)

while True:

    ret, frame = capture.read()

    cv2.imshow("test", frame)

    if cv2.waitKey(1) & 0xff == ord("q"):

        break


命令行查看GPU(每秒刷新):

watch -n 1 -d nvidia-smi 


发现GPU和CPU都有增加,并不是编译失败而是cv2.imshow()方法依然占用CPU运算,GPU有增加则证明已经在GPU上运算opencv,到此编译成功。


以上是关于opencv+cuda 编译的主要内容,如果未能解决你的问题,请参考以下文章

极智开发 | ubuntu源码编译cuda版opencv

opencv + cuda编译

在ubuntu中用cuda编译opencv的makefile停止工作

vs2017+opencv+qt+cuda,使用cmake编译opencv的库

OpenCV 3.2.0 +Win10+ CUDA 8.0+ VS2013 编译

使用 OpenCV3.4.5 在 Qt5 中与 Cuda 相关的编译错误