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

news2024/11/29 13:43:34

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

一、准备工作

  1. 下载opencv :opencv-4.7.0-windows.exe;
  2. 下载vs2019Visual Studio Enterprise 2019;
  3. 下载Video_CodecVideo_Codec_SDK_10.0.26,该软件需要与Cuda版本对应
  4. 下载cudacuda_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. 下载cmakecmake 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 
 

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1348530.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

gem5学习(8):创建一个简单的缓存对象--Creating a simple cache object

目录 一、SimpleCache SimObject 二、Implementing the SimpleCache 1、getSlavePort() 2、handleRequest() 3、AccessEvent() 4、accessTiming() (1)缓存命中:sendResponse() (2)缓存未命中: 三、…

Easy Rules规则引擎实战

文章目录 简介pom 规则抽象规则Rule基础规则BasicRule事实类Facts:map条件接口动作接口 四种规则定义方式注解方式RuleBuilder 链式Mvel和Spel表达式Yml配置 常用规则类DefaultRuleSpELRule(Spring的表达式注入) 组合规则UnitRuleGroup 规则引…

读书笔记1-C++ Primer Plus

C是在C语言基础上开发的一种集面向对象编程(OOP)、通用编程和传统的过程化编程于一体的编程语言。本书是根据2003年的ISO/ANSI C标准编写的,通过大量短小精悍的程序详细而全面地阐述了C的基本概念和技术。 全书分17章和10个附录,分…

【Spring】AOP原来如此

AOP概述 什么是AOP的技术? 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程AOP是一种编程范式,隶属于软工范畴,指导开发者如何组织程序结构AOP最早由AOP联盟的组织提出的,制定了一套…

如何在VSCode搭建ESP-IDF开发ESP32

文章目录 概要安装VScode安装ESP-IDF插件使用官方例程小结 概要 ESP-IDF(Espressif IoT Development Framework) 即乐鑫物联网开发框架,它基于 C/C 语言提供了一个自给自足的 SDK,可为在 Windows、Linux 和 macOS 系统平台上开发 ESP32 应用程序提供工具…

【单片机项目实战】温度控制系统

本项目的主要作用是实现温度调控,通过设定一个预定的温度值,实现实时检测外界温度,当外界温度小于预定值时,电机正转,实现降温效果;当外界温度大于预定值时,电机反转,实现升温效果&a…

神秘的Cookie和Session

Cookie 1.Cookie是什么? Cookie是浏览器提供的持久化储存数据的方式。 2.从哪里来? Cookie从服务器中来,存储到客户端中。一个客户端就对应着一个浏览器。 服务器代码中决定了什么样的数据会储存到客户端中,通过HTTP相应的Se…

C# WPF上位机开发(以始为终,寻找真实的上位机需求)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 c# wpf、qt、mfc这些上位机的需求是真实存在的,在现实中有很多应用的地方,这一点大家都很清楚。而程序员本身呢&#xff0c…

0101包冲突导致安装docker失败-docker-云原生

文章目录 1 前言2 报错3 解决结语 1 前言 最近在学习k8s,前置条件就是要安装指定版本的docker,命令如下 yum install -y docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io-1.4.62 报错 file /usr/libexec/docker/cli-plugins/docker-buildx fr…

企业网盘的价值与用途:一篇文章带您了解核心功能与优势

企业网盘是当下企业管理中热度高居不下的话题,那么企业网盘到底是什么?企业网盘有什么用? 企业网盘是什么? 企业网盘是基于云计算理念推出的企业数据网络存储和管理解决方案,通俗来讲,企业网盘就是一个企…

算法基础day1

归并排序模版 #include <iostream> using namespace std; int n; const int N 1e610; int q[N],tmp[N]; void merge_sort(int l,int r,int q[]){if(l>r) return;int mid lr>>1;merge_sort(l,mid,q);merge_sort(mid1,r,q);//归并的的过程int k0,il,jmid1;while(…

MAC 中多显示器的设置(Parallels Desktop)

目录 一、硬件列表&#xff1a; 二、线路连接&#xff1a; 三、软件设置&#xff1a; 1. 设置显示器排列位置及显示参数 2. 分别设置外接显示器为&#xff1a;扩展显示器&#xff0c;内建显示器为主显示器 3. 设置Parallels Desktop屏幕参数 四、结果 一、硬件列表&a…

小白学 PyTorch 系列:54个超强 pytorch 操作

最近观察到一个有趣的趋势&#xff0c;越来越多的人在学术界热衷于学习和应用PyTorch。在工业界&#xff0c;虽然仍有一些项目在延续使用之前的深度学习框架&#xff0c;但 PyTorch 的影响力也在逐渐渗透。 对于昨天为什么没发文&#xff0c;原因很心酸。把 PyTorch 的这篇文章…

亚马逊云科技Amazon Q,一款基于生成式人工智能的新型助手

近日&#xff0c;亚马逊云科技宣布推出Amazon Q&#xff0c;这是一款基于生成式人工智能&#xff08;AI&#xff09;的新型助手&#xff0c;专为辅助工作而设计&#xff0c;可以根据您的业务量身定制。通过连接到公司的信息存储库、代码、数据和企业系统&#xff0c;可以使用Am…

Vue2中使用echarts,并从后端获取数据同步

一、安装echarts npm install echarts -S 二、导入echarts 在script中导入&#xff0c;比如&#xff1a; import * as echarts from "echarts"; 三、查找要用的示例 比如柱状图 四、初始化并挂载 <template><div id"total-orders-chart" s…

归并算法排序

目录 归并排序 逆序对的数量 归并排序 题目如下&#xff1a; 给定你一个长度为 n 的整数数列。 请你使用归并排序对这个数列按照从小到大进行排序。 并将排好序的数列按顺序输出。 输入格式&#xff1a; 输入共两行&#xff0c;第一行包含整数 n。 第二行包含 n 个整数&…

CEC2017(Python):差分进化算法DE求解CEC2017

一、CEC2017简介 参考文献&#xff1a; [1]Awad, N. H., Ali, M. Z., Liang, J. J., Qu, B. Y., & Suganthan, P. N. (2016). “Problem definitions and evaluation criteria for the CEC2017 special session and competition on single objective real-parameter numer…

Android 实现 Slots 游戏旋转效果

文章目录 前言一、效果展示二、代码实现1.UI布局2.SlotAdapter2.SlotsActivity 总结 前言 slots游戏&#xff1a; Slots游戏是一种极具流行度的赌博和娱乐形式&#xff0c;通常被称为老虎机或水果机。它们在赌场、线上游戏平台和手机应用中广泛存在。一般这类游戏都使用Unity…

重温MySQL之索引那些事

文章目录 前言一、概念1.1 索引作用1.2 索引类型1.3 B树索引结构1.4 B树索引源码分析 二、查询计划2.1 explain2.2 id2.3 select_type2.4 table2.5 partitions2.6 type2.7 possible_keys2.8 key2.9 key_len2.10 ref2.11 rows2.12 filtered2.13 Extra 三、索引优化3.1 索引失效3…

【2023年终总结】 | 时光之舟:乘载着回忆与希望穿越2023,抵达2024

文章目录 1 回忆2 希望 1 回忆 2023年对我来说是非常梦幻的一年&#xff0c;我在2023年初的时候确认去做AI方向&#xff0c;在这之前我尝试了前端开发&#xff0c;移动App开发&#xff0c;云FPGA等方向&#xff0c;但是感觉自己都不是很喜欢&#xff0c;然后就开始尝试新的方向…