栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

cuda10.2+ubuntu18.04+docker视频编解码

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

cuda10.2+ubuntu18.04+docker视频编解码

安装配置参考

#include 

#include "opencv2/opencv_modules.hpp"

#if defined(HAVE_OPENCV_CUDACODEC)

#include 
#include 
#include 
#include 

#include 
#include 
#include 
#include 

int main(int argc, const char* argv[])
{
    if (argc != 2)
        return -1;

    const std::string fname(argv[1]);
    
    //显示视频
    //cv::namedWindow("CPU", cv::WINDOW_NORMAL);
    cv::namedWindow("GPU", cv::WINDOW_OPENGL);
    cv::cuda::setGlDevice();

    //cv::Mat frame;
    //cv::VideoCapture reader(fname);

    cv::cuda::GpuMat d_frame;
    cv::Ptr d_reader = cv::cudacodec::createVideoReader(fname);

    cv::TickMeter tm;
    std::vector cpu_times;
    std::vector gpu_times;

    int gpu_frame_count=0, cpu_frame_count=0;


    for (;;)
    {
        tm.reset(); tm.start();
        if (!d_reader->nextFrame(d_frame))
            break;
        tm.stop();
        gpu_times.push_back(tm.getTimeMilli());
        gpu_frame_count++;

        cv::imshow("GPU", d_frame);

        if (cv::waitKey(3) > 0)
            break;
    }

    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 << " Frames " << cpu_frame_count << std::endl;
        std::cout << "GPU : Avg : " << gpu_avg << " ms FPS : " << 1000.0 / gpu_avg << " Frames " << gpu_frame_count << std::endl;
    }

    return 0;
}

#else

int main()
{
    std::cout << "OpenCV was built without CUDA Video decoding supportn" << std::endl;
    return 0;
}

#endif

makefile文件

opencv_cuda.o:opencv_cuda.cpp
	g++ -std=c++11 -g -o main.out opencv_cuda.cpp `pkg-config opencv4 --cflags --libs` 
    -I/usr/local/opencv-4.2.0/include/opencv4/opencv2 
    -I/usr/local/cuda/include 
    -L/usr/local/cuda/lib64 
    -I/usr/include/eigen3 
    -L/usr/lib/x86_64-linux-gnu -lcuda -ldl -lnvcuvid
    
clean:
	rm *.o main.out 

编译并运行

make
./main.out test.h264
# or
./main.out rtsp://admin:hk888888@10.171.1.233/h265/ch1/main/av_stream

参考文章

  • cuda+ffmpeg+opencv的编译安装
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/939512.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号