OpenCV GPU解码简单例子

基于GPU/cuda的运算能够极大解放CPU的负担,特别是针对复杂图像处理的场景中。该例子主要展示利用GPU的硬解码模块,对本地和网络视频流进行解码和本地显示。环境如下,ubuntu20.04+opencv4.10.0+cuda12.5. 代码逻辑比较简单,不涉及复杂逻辑和算法,直接看代码。

GPU 解码本地视频并进行显示

复制代码
 1 int video_decode_show_test(std:: string fname)
 2 {
 3     cv::namedWindow("GPU", cv::WINDOW_NORMAL);
 4     
 5     /** 1. 构造视频读取器  */
 6     cv::Ptr<cv::cudacodec::VideoReader> d_reader;
 7     try{
 8         d_reader  = cv::cudacodec::createVideoReader(fname);
 9     }catch(cv::Exception ex)
10     {
11         printf("Failed to open video for %s.\n", ex.err.c_str());
12         return -1;
13     }
14     
15     /** 2. 读取视频帧  */
16     cv::cuda::GpuMat d_frame;
17     for (;;)
18     {
19         try{
20             if (!d_reader->nextFrame(d_frame))
21                 break;
22         }catch(cv::Exception ex){
23             printf("Failed to read frame.");
24             continue;
25         }
26         
27         /** 3. 将视频帧从内存中下载到内存中,并显示  */
28         cv::Mat frame;
29         d_frame.download(frame);
30         cv::imshow("GPU", frame);
31         
32         if (cv::waitKey(10) > 0)
33             break;
34     }
35     
36     d_reader.release();
37     return 0;
38 }
复制代码

 

posted @   远桥  阅读(179)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示