基于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 }
标签:解码,OpenCV,ex,frame,reader,GPU,cv From: https://www.cnblogs.com/uuvv/p/18289012