从相机抓取图像,进行图像处理并用视频编写器保存视频太快C++

问题描述

我正在从我的相机中抓取图像并使用 C++ 对其进行一些图像处理。问题是我无法知道我的 fps 精确度,因为我的图像处理不稳定(在 25 到 40 毫秒之间振荡)。因此,当我在视频编写器中添加帧时,视频的最后速度太快了。所以我降低了 videowriter.open 中的 fps,但由于我的图像处理时间不稳定,视频速度出现波动。

有人有什么建议可以制作正常速度的视频吗? 除了opencv的videowriter之外,我还必须使用其他东西吗?

提前致谢

我的一部分代码是:

cv::Mat ImgRAW;
cv::Mat oResultImg; 

std::shared_ptr< cv::VideoWriter>   m_pVideoWriter = nullptr;

m_pVideoWriter = std::make_shared<cv::VideoWriter>();

fFramerate = 20;

pVideoWriter->open(strPathName,cv::VideoWriter::fourcc('m','p','4','v'),fFramerate,size,true);
While (IsGrabbing)
{

doProcessing(ImgRaw,oResultImg);

if (yRecordVideo)
            {
                oVideowriter.AddFrame(oResultImg);
                cv::waitKey(25);
            }

}

oVideowriter.release();

解决方法

将图像抓取和处理分离可能是明智的。有一个专门的线程,每 N 秒抓取一次图像,并在中间休眠。另一个线程处理图像。如果落后太多,则将一帧写入两次并跳过下一帧的处理。

或者,如果可能,您可以离线进行处理