win10 opencv3.4.1 硬解码模块配置及使用

1.编译

如果只是使用硬解码模块的话,需要使用Cmake从源码重新编译opencv,但是不需要使用contrib模块,因为硬解码部分包含在原始的opencv内部。

Cmake编译时需要:参考自https://blog.csdn.net/qq_37837518/article/details/78619800
对于cuda 需要勾上WITH_TBB、WITH_IPP、WITH_EIGEN、WITH_CUBLAS、WITH_CUDA和WITH_CUFFT,其中tbb和eigen 需要自己下载并配置路径。
TBB_INCLUDE_DIRS D:/opencv32/tbb/include
TBB_LIB_DIR D:/opencv32/tbb/lib/intel64/vc12
EIGEN_INCLUDE_PATH D:/opencv32/Eigen
注意 D:/opencv32/Eigen 目录下还有一个单独的Eigen, 如 D:/opencv32/Eigen /Eigen/include.
如果想要用opengl,自己去配置好后再选上WITH_OPENGL。再次点击configure后点generate,成功后就可以继续下一步编译了。

2.使用时的bug

编译完成后,有了opencv_cudacodec341.lib和对应的dll文件,使用opencv\sources\samples\gpu\video_reader.cpp示例代码,出现了以下bug:

cv::Ptr<cv::cudacodec::VideoReader> d_reader = cv::cudacodec::createVideoReader(fname);

这里写图片描述

解决这个问题需要将自己机器上的C:\ProgramData\NVIDIA Corporation\CUDA Samples\v9.0\3_Imaging\cudaDecodeGL\dynlink_nvcuvid.cpp加入到opencv3.4.1的sources\modules\cudacodec\src下,并将该文件下的video_reader.cpp中的 Ptr cv::cudacodec::createVideoReader(const String& filename)函数内部起始处添加以下代码:

    static CUresult res = CUDA_ERROR_UNKNOWN,res1 = CUDA_ERROR_UNKNOWN;
    void* hHandleDriver = 0;
    if (CUDA_SUCCESS != res)
    {
        res = cuInit(0);
        if (res != CUDA_SUCCESS) {
            throw std::exception();
        }
    }

    if (CUDA_SUCCESS != res1)
    {
        res1 = cuvidInit(0);
        if (res1 != CUDA_SUCCESS) {
            throw std::exception();
        }
    }

重新cmake&编译 opencv,编译完成后添加环境变量,可实现对某些格式视频的硬解码,对RTSP视频流测硬解码暂时不支持,尚需继续探索。

才疏学浅,欢迎批评指正!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值