使用vscode,cmake,opencv gpu进行硬解码视频

在此之前需要基于msvc编译器来编译gpu版opencv,详细内容请查看windows下不依赖Visual Studio编译gpu版opencv,支持硬解码硬编码

  1. vscode安装:这个就不赘述了,安装完vscode后需要安装cmake tools插件
  2. 配置opencv的dll库路径,在电脑中将编译好的opencv的bin路径添加到环境变量中,这样后续编译好的exe才能加载opencv的动态dll库
    在这里插入图片描述
  3. 在开始菜单中点击x64 Native Tools Command Prompt for VS 2022打开编译器,不知道微软的msvc编译器的可以看开头的文章,在编译器中输入code来启动vscode,只有这样cmake tools才能识别出来编译器环境。也有其他方法,配置编译器环境变量,这个自行查找
  4. 编写c++代码
// main.cpp
#include <iostream>
#include <vector>
#include <numeric>
#include <opencv2/cudacodec.hpp>
#include <opencv2/highgui.hpp>

int main(int argc, const char* argv[])
{
    // std::cout<<cv::getBuildInformation()<<std::endl;
    //将这个视频改成你自己的
    const std::string fname = "test.mp4";
    cv::Mat frame;
    cv::VideoCapture reader(fname);
    cv::cuda::GpuMat d_frame;
    cv::Ptr<cv::cudacodec::VideoReader> d_reader = cv::cudacodec::createVideoReader(fname);
    cv::TickMeter tm;
    std::vector<double> cpu_times;
    std::vector<double> gpu_times;

    for (int i = 0;i<200;i++)
    {
        tm.reset(); tm.start();
        if (!reader.read(frame))
            break;
        tm.stop();
        if (i>50)
        	cpu_times.push_back(tm.getTimeMilli());
		// cv::imshow('cpu',frame);
		// cv::waitKey(1);
        tm.reset(); tm.start();
        if (!d_reader->nextFrame(d_frame))
            break;
        tm.stop();
        if (i>50)
        	gpu_times.push_back(tm.getTimeMilli());
        // d_frame.download(frame);
        // cv::imshow("gpu",frame);
        // cv::waitKey(1);
    }

    if (!cpu_times.empty() && !gpu_times.empty())
    {
        std::cout << std::endl << "Results:" << std::endl;

        std::sort(cpu_times.begin(), cpu_times.end());
        std::sort(gpu_times.begin(), gpu_times.end());

        double cpu_avg = std::accumulate(cpu_times.begin(), cpu_times.end(), 0.0) / cpu_times.size();
        double gpu_avg = std::accumulate(gpu_times.begin(), gpu_times.end(), 0.0) / gpu_times.size();

        std::cout << "CPU : Avg : " << cpu_avg << " ms FPS : " << 1000.0 / cpu_avg << std::endl;
        std::cout << "GPU : Avg : " << gpu_avg << " ms FPS : " << 1000.0 / gpu_avg << std::endl;
    }

    return 0;
}
  1. 编写CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(opencv_example_project)
set(OpenCV_DIR F:/3rdparty/opencv/sources/build/install/lib) #替换你自己的lib路径
find_package(OpenCV REQUIRED)
add_executable(opencv_example main.cpp)
target_link_libraries(opencv_example PRIVATE ${OpenCV_LIBS})     
  1. 生成可执行文件并执行
    在这里插入图片描述
    在这里插入图片描述

可以看到gpu执行的速度还是非常快的,我这里是8k的视频,gpu设备是rtx3060 laptop gpu读取速度344fps,不过这里是时间计算我感觉是有问题的,不知道gpu解码的时间有没有同步在gpu_times中,而且这里仅仅是解码的时间,如果在加上从显存到内存的时间,速度是很慢的。不过硬解码的视频本身就是为了送给ai预测的,所以没必要拷贝到内存

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用VSCode配置OpenCV C++项目之前,你需要确保已经安装了VSCodeCMake,并且已经成功安装了OpenCV库。接下来,你可以按照以下步骤进行配置: 步骤1:创建工作目录 在你的项目文件夹中创建一个名为 `.vscode` 的文件夹。 步骤2:创建 CMakeLists.txt 文件 在你的项目文件夹中创建一个名为 `CMakeLists.txt` 的文件,用于配置CMake。 步骤3:配置 CMakeLists.txt 在 `CMakeLists.txt` 文件中添加以下内容: ```cmake cmake_minimum_required(VERSION 3.12) project(YourProjectName) # 设置 C++ 标准 set(CMAKE_CXX_STANDARD 14) # 寻找 OpenCV 库 find_package(OpenCV REQUIRED) # 添加可执行文件 add_executable(YourExecutableName main.cpp) # 链接 OpenCV 库 target_link_libraries(YourExecutableName ${OpenCV_LIBS}) ``` 请确保将 `YourProjectName` 替换为你的项目名称,将 `YourExecutableName` 替换为你的可执行文件名称。 步骤4:配置 launch.json 在 `.vscode` 文件夹中创建一个名为 `launch.json` 的文件,并添加以下内容: ```json { "version": "0.2.0", "configurations": [ { "name": "(gdb) Launch", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/build/YourExecutableName", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, "MIMode": "gdb", "miDebuggerPath": "/usr/bin/gdb" } ] } ``` 请确保将 `YourExecutableName` 替换为你的可执行文件名称。 步骤5:构建项目 打开VSCode,点击菜单栏的 `Terminal` -> `New Terminal`,进入终端界面。 在终端中执行以下命令,进入项目文件夹: ``` cd /path/to/your/project ``` 然后执行以下命令,使用CMake构建项目: ``` mkdir build cd build cmake .. ``` 步骤6:调试项目 在VSCode的左侧边栏中点击 `Run and Debug` 按钮,然后点击绿色的调试按钮,即可开始调试你的OpenCV C++项目。 希望以上步骤对你有所帮助!如有任何问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值