gpt4 book ai didi

c++ - OpenCV:实时过滤多帧

转载 作者:太空宇宙 更新时间:2023-11-04 14:31:57 24 4
gpt4 key购买 nike

我试图通过多个帧过滤同一个点。基本上,我想取一个像素(比如在位置 (0,0))并在多个帧的那个位置运行一个过滤器。

我正在从网络摄像头获取一个框架(类型为 Mat)。我想从相机中缓冲大约 30 帧,并为这 30 帧制作代表相同位置的 vector 。例如,如果输入是 640x480 @ 30fps。我想要 640x480=307,200 个 30 点长的 vector 。在 MATLAB 中,这基本上是一个 vector 矩阵(3D 矩阵),其中每个 vector 的长度为 30 个元素。我想要这个以便我可以为每个像素应用时间过滤器。

我想我需要制作一个 30 维的 3D Mat (CvMatND)。然后我会将每个新帧放入一个新维度,直到我的矩阵为 640x480x30。然后我可以过滤 vector

(0, 0, :)

(0, 1, :)

(0, 2, :)

...

(640, 480, :)

将滤镜应用于每个 vector 后,我将输出 30 帧视频。

我的问题是缓冲 30 帧的最佳方法是什么?获得 30 帧后,对每个像素应用滤镜(例如低通滤镜)的最佳方式是什么?

感谢您的帮助。

最佳答案

这是我在 Øystein W. 的帮助下得出的结论

为新帧创建一个 Mat 并为缓冲区创建一个 mat vector :

Mat frame;  // grab the newest frame
std::vector <cv::Mat> buffer; // buffer for frames

因为我正在从网络摄像头获取帧(最新的在“帧”中),所以我必须在继续之前填满缓冲区:

if (buffer.size() < 30)
{
buffer.push_back(frame);
continue; // goes back to the beginning of the loop, program can't start until the buffer is full
}
else
{
buffer.erase(buffer.begin()); // this part deletes the first element
buffer.push_back(frame); // this part adds the new frame to the end of the vector
}

这应该将最新的框架保持在底部,将最旧的框架保持在顶部。

关于c++ - OpenCV:实时过滤多帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23164324/

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