opencv4编译 GPU解码 CUDA

opencv4编译

1. 下载opencv、opencv_contrib、cuda、cudnn

opencv
opencv_contrib
cuda
cudnn (可选)

2. 编译脚本

在opencv根目录中创建文件build.sh

#!/bin/env bash
mkdir -p build
cd build
cmake -DOPENCV_EXTRA_MODULES_PATH:PATH="D:/libs/opencv_linux/opencv_contrib/modules" -DCUDNN_LIBRARY="D:/libs/cuda/lib/x64" -DCUDNN_INCLUDE_DIR="D:/libs/cuda/include"  -DOPENCV_DNN_CUDA:BOOL="1" -DWITH_NVCUVID:BOOL="1" -DBUILD_JAVA:BOOL="0" -DBUILD_PERF_TESTS:BOOL="0" -DBUILD_opencv_python_bindings_generator:BOOL="0" -DBUILD_opencv_python_tests:BOOL="0" -DWITH_CUDA:BOOL="1" -DBUILD_opencv_world:BOOL="1" -DBUILD_TESTS:BOOL="0" -D OPENCV_GENERATE_PKGCONFIG=ON -DCMAKE_INSTALL_PREFIX=install -DCMAKE_BUILD_TYPE=RELEASE ..
make -j
make install

cmake执行完后的正确打印信息最后几行如下

--   NVIDIA CUDA:                   YES (ver 11.1, CUFFT CUBLAS NVCUVID)
--     NVIDIA GPU arch:             35 37 50 52 60 61 70 75 80 86
--     NVIDIA PTX archs:
--
--   cuDNN:                         YES (ver 8.0.4)
--
--   OpenCL:                        YES (NVD3D11)
--     Include path:                D:/libs/opencv_linux/3rdparty/include/opencl/1.2
--     Link libraries:              Dynamic load
--
--   Python (for build):            C:/Users/xshen/AppData/Local/Programs/Python/Python39/python.exe
--
--   Install to:                    D:/libs/opencv_linux/build/install
-- -----------------------------------------------------------------
--
-- Configuring done
-- Generating done
-- Build files have been written to: D:/libs/opencv_linux/build

linux

直接运行脚本;

windows

需要安装Visual Studio和cmake,自行创建build目录,build目录内cmd中执行cmake一行,然后打开生成的OpenCV.sln编译

说明

  • 脚本中的路径替换成自己的目录。
  • 编译好的动态库生成在build/install目录
  • cmake命令执行时需观察有没有报错误,自行搜索错误的解决办法
  • 经常会碰到下载失败的情况,打开build/CMakeDownloadLog.txt文件复制下载路径(如: https://raw.githubusercontent.com/opencv/opencv_3rdparty/a56b6ac6f030c312b2dce17430eef13aed9af274/ippicv/ippicv_2020_win_intel64_20191018_general.zip)到浏览器中下载

3. GPU解码

example:

#include <iostream>
#include <opencv2/opencv_modules.hpp>
#include <opencv2/cudacodec.hpp>

int main(char argc, char** argv)
{
	 cv::cuda::GpuMat img;
	 cv::Ptr<cv::cudacodec::VideoReader> cap;
     try {
         cap = cv::cudacodec::createVideoReader(argv[1]);
         int index = 0;
         while (cap->nextFrame(img))
         {
             std::cout << index++ << std::endl; 
         }
     } catch (const std::exception& e) {
         std::cout << e.what() << std::endl;
     }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值