VS2019+OpenCV4.7.0+OpenCV_contrib4.7.0+CUDA安装+配置视频硬解码保姆级别教程

在算法开发过程中,涉及基于opencv的rtsp流硬解码,这里设计结合当前所有的资料,实现了现有opengl相关的所有跟视频硬解码相关的功能,下面对opencv4.7.0的编译流程进行说明:

一、准备工作

  1. 下载opencv :opencv-4.7.0-windows.exe;
  2. 下载vs2019:Visual Studio Enterprise 2019;
  3. 下载Video_Codec:Video_Codec_SDK_10.0.26,该软件需要与Cuda版本对应
  4. 下载cuda:cuda_10.1.243_426.00_windows.exe,这个可以任意选择
  5. 下载gstreamer:gstreamer-1.0-devel-msvc-x86_64-1.22.7.msi 和gstreamer-1.0-msvc-x86_64-1.22.7.msi
  6. 下载cmake:cmake 3.21.3

二、编译opencv4.7.0

特殊说明:opencv相关的第三方库已经下载完成,都在opencv4.7.0目录下。

  1. 1.Cmake配置

  2. 先配置cmake设置,选择vs2019和x64,之后点击finish。

2.配置OPENCV_EXTRA_MODULES_PATH:

在Search栏输入OPENCV_EXTRA_MODULES_PATH,添加下面的opencv_contrib-4.7.0路径,opencv_contrib-4.7.0已经下载好,在opencv4.7.0目录下,之后点击configure,需要连续点击2次:

复制代码
OPENCV_EXTRA_MODULES_PATH = D:/Opencv/Opencv-4.7.0/opencv_contrib-4.7.0/modules

3.去掉BUILD_TESTS、BUILD_DOCS、BUILD_PERF_TESTS、BUILD_EXAMPLES等:

在search中分别输入test、python、doc、example,把勾选都去掉;

一般情况下,在上面的configure后,把滚动条拉倒最上方,把下面的几个选项的勾去掉,需要把没有用的选项去掉,之后再点击configure,一般需要点击两次。

4.添加cuda选项:

在Search栏输入cuda,把下面添加WITH_CUDA、BUILD_CUDA_STUBS、OPENCV_DNN_CUDA进行勾选,之后点击configure,需要连续点击2次。

在Search栏输入cuda和enable,把下面添加CUDA_FAST_MATH和ENABLE_FAST_MATH进行勾选,且把CUDA_ARCH_BIN=6.1;7.0;7.5(我使用的是GTX1050TI,最小算力为6.1,需要保留以上的即可)之后点击configure,需要连续点击2次。

5.添加 nonfree选项:

在搜索栏搜索nonfree,勾选BUILD_ENABLE_NONFREE选项,之后点击Configure,需要连续点击2次。

6.NVCUVID选项:

在search中输入nvcu,勾选WITH_NVCUVID和WITH_NVCUVIDNC,把Video_Codec_SDK_10.0.26\Interface中的cuviddec.h和nvcuvid.h⽂件拷⻉到"CUDA安装⽬录\CUDA\v10.1\include"⽂件夹下,把 Video_Codec_SDK_10.0.26\Lib\x64中的nvcuvid.lib和nvencodeapi.lib拷⻉到"CUDA安装⽬录\CUDA\v10.1\lib\x64"⽂件夹下。再次点击configure。如果在NVIDIA CUDA选项中出现NVCUVID字段,说明配置成功。

7.配置gstreamer

在search中输入gstreamer,分别添加对应的路径,如下图所示,表示成功:

8.添加 opengl选项:

在搜索栏搜索opengl,勾选WITH_OPENGL选项,之后点击Configure,需要连续点击2次,opencv配置完成。

9.添加 world选项:

在搜索栏搜索world,勾选BUILD_opencv_world选项,之后点击Configure,需要连续点击2次,opencv配置完成。

10.生成vs2019工程

最后点击Generate,生成opencv的vs2019的工程,进入目录后打开工程。

11.编译opencv工程:

用vs2019打开工程,设置为Release x64编译模式,最后把INSTALL设置为启动选项,之后编译工程,生成的算法库在install目录下:

三、多线程解码

基于Code的多线程解码,以及opengl的显示方法如下:

复制代码
void thread_decodec(void* pData)
{
    vsDecodecParam* parm = (vsDecodecParam*)pData;

    int breakConnectTimes = 0;
    int threadID = parm->threadID;
    cv::cuda::GpuMat d_frame;
    cv::Mat frame;

    cv::VideoCapture d_reader(parm->rtspStream);
    std::string title = to_string(parm->threadID);
    cv::ogl::Texture2D text;
    cv::namedWindow(title, cv::WINDOW_OPENGL);
    while (!g_exitFlag)
    {
        if (!d_reader.read(frame))
        {
            //break;
            std::this_thread::sleep_for(std::chrono::milliseconds(500));
            breakConnectTimes++;
            if (breakConnectTimes > 10)//重新连接
            {
                d_reader = cv::VideoCapture(parm->rtspStream);
                std::this_thread::sleep_for(std::chrono::milliseconds(2000));
            }
        }
        breakConnectTimes = 0;
        g_mtx.lock();
        d_frame.copyTo(m_decodeGPU[threadID]);
        //m_decodeGPU[threadID].upload(frame);
        g_mtx.unlock();

        text.copyFrom(d_frame, true);
        cv::imshow(title, text);
        if (cv::waitKey(3) > 0)
            break;
    }
}

opencv4.7.0的离线版本已经下载完成,只需要把上面依赖的源码下载即可,opencv的codec和gestreamer已经上传的百度网盘,版本有升级,按照上面的步骤即可,有需要的可以下载:

链接:https://pan.baidu.com/s/1diaB5gPXqosIdvHcqJrJIg

提取码:m9d2

相关推荐
大模型真好玩1 分钟前
深入浅出LangGraph AI Agent智能体开发教程(八)—LangGraph底层API实现ReACT智能体
人工智能·agent·deepseek
IT_陈寒16 分钟前
告别低效!用这5个Python技巧让你的数据处理速度提升300% 🚀
前端·人工智能·后端
北京耐用通信30 分钟前
神秘魔法?耐达讯自动化Modbus TCP 转 Profibus 如何为光伏逆变器编织通信“天网”
网络·人工智能·网络协议·网络安全·自动化·信息与通信
居7然32 分钟前
如何高效微调大模型?LLama-Factory一站式解决方案全解析
人工智能·大模型·llama·大模型训练·vllm
FullmetalCoder1 小时前
一文搞懂智能体
人工智能
zzywxc7871 小时前
AI 行业应用:AI 在金融、医疗、教育、制造业等领域的落地案例
人工智能·spring·金融·prompt·语音识别·xcode
六月的可乐1 小时前
Vue接入AI聊天助手实战
前端·vue.js·人工智能
赴3351 小时前
dlib库关键点定位和疲劳检测
人工智能·opencv·计算机视觉·关键点·疲劳检测·dlib
汀丶人工智能1 小时前
AI Compass前沿速览:Qwen3-Max、Mixboard、Qwen3-VL、Audio2Face、Vidu Q2 AI视频生成模型、Qwen3-Liv
人工智能
唐天下文化1 小时前
展厅迎宾机器人:豹小秘2如何打造科技第一印象
人工智能·科技·机器人