gpt4 book ai didi

c++ - 如何将视频流数据转换为 cv::gpumat?

转载 作者:行者123 更新时间:2023-11-28 04:30:06 26 4
gpt4 key购买 nike

我需要将视频流数据转换为 cv::gpumat。最初我尝试复制到 cv::Mat,然后使用上传将其加载到 gpumat。这个过程非常慢(640*480 帧需要 20 毫秒)。

我需要一种直接从 openni videostream 转换为 gpumat 的方法。我尝试了以下代码,但它给出了运行时错误

我在 ubuntu 16.04 上使用 opencv3.1、cuda-8.0、gtx titanx

#include "opencv2/opencv_modules.hpp"
#include <opencv2/core.hpp>
#include <opencv2/cudacodec.hpp>
#include <opencv2/highgui.hpp>

int main(int argc, const char* argv[])
{
const std::string fname = argv[1];

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

for (;;)
{
if (!d_reader->nextFrame(d_frame))
break;

cv::Mat frame;
d_frame.download(frame);
cv::imshow("GPU", frame);

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

OpenCV Error: The function/feature is not implemented (The called functionality is disabled for current build or platform) in throw_no_cuda, file /home/krr/softwares/opencv-3.1.0/modules/core/include/opencv2/core/private.cuda.hpp, line 101
terminate called after throwing an instance of 'cv::Exception'
what(): /home/krr/softwares/opencv-3.1.0/modules/core/include/opencv2/core/private.cuda.hpp:101: error: (-213) The called functionality is disabled for current build or platform in function throw_no_cuda

最佳答案

查看 source code .该框架称为“throw_no_cuda()”(线路不同,版本?)。此外,该错误似乎与 this one 重复在 github 上。

alalek:
https://developer.nvidia.com/nvidia-video-codec-sdk:

Note: For Video Codec SDK 7.0 and later, NVCUVID has been renamed to NVDECODE API.

OpenCV 不支持新的 API,也没有计划添加它。带有 NVCUVID 的最新 CUDA 版本是 ~ CUDA 6.5。

考虑使用启用了 CUDA 功能的 ffmpeg(通过普通的 cv::VideoCapture - 但它不能与 CUDA 的 cv::GpuMat 一起使用)。

还有:

dapicard:
I found a way to define the codec used by the FFMpeg backend :

export OPENCV_FFMPEG_CAPTURE_OPTIONS="video_codec|h264_cuvid"

更一般地说,可以使用语法 parameter_name|value;parameter_name2|value2 来定义这些参数

也就是说,使用硬件功能解码视频(您尝试过)。旁注:ffmpeg 还提供了直接在 gpu 上转码视频的选项(即无需从 gpu 内存中移出)。
坦率地说,使用建议的方法不会导致矩阵直接传递到您的 gpu 内存,而只会解决错误。我不认为直接从 ffmpeg 直接获取内存是可能的,所以你只能移动它。

关于c++ - 如何将视频流数据转换为 cv::gpumat?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53184916/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com