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的makefile停止工作
vs2017+opencv+qt+cuda,使用cmake编译opencv的库