如何解决从相机抓取图像,进行图像处理并用视频编写器保存视频太快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 秒抓取一次图像,并在中间休眠。另一个线程处理图像。如果落后太多,则将一帧写入两次并跳过下一帧的处理。
或者,如果可能,您可以离线进行处理
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。