OpenCV VideoWriter 帧率问题

2023-11-30

我正在尝试将 1080p 网络摄像头的视频录制到文件中。我在视频中设置了一个计时器,在每次试验中,视频播放器(我使用的是 VLC)报告的时间戳与视频中的时间不同步。它总是会关闭几秒钟(通常视频内计时器比玩家报告的时间快)。

如下所示,我将 C++ 程序设置为在一个线程中捕获视频,并在另一个线程中进行录制。这工作正常,因为我的 CPU 使用率约为 200%(可能是最大输出?)。我使用的是配备 OS X 10.8 @ 1.8 GHz Intel Core i7 的 Macbook Air。

我尝试将帧速率更改为 15fps,但这会导致视频非常不稳定/缓慢。我也尝试过设置CV_CAP_PROP_FRAME_WIDTH & CV_CAP_PROP_FRAME_HEIGHT降低分辨率会导致视频速度变慢。看起来 1080p @ 30fps 会产生良好稳定的视频,但它的播放速度仍然比预期的要快。我也尝试过放入waitKey(10); after record << frame;但这并没有影响任何事情。

关于如何使视频及时匹配有什么建议吗?

谢谢! 阿卡什

#include "opencv/cv.h"
#include "opencv/highgui.h"
#include <boost/thread.hpp>

using namespace cv;

void captureFunc(Mat *frame, VideoCapture *capture){
    for(;;){
        // get a new frame from camera
        (*capture) >> (*frame);
    }
}

int main(int, char**)
{
    VideoCapture capture(0); // open the default camera
    if( !capture.isOpened() )  {
        printf("Camera failed to open!\n");
        return -1;
    }

    capture.set(CV_CAP_PROP_FPS,30); //set capture rate to 30fps
    Mat frame;
    capture >> frame; // get first frame for size

    // initialize recording of video
    VideoWriter record("test.avi", CV_FOURCC('D','I','V','X'), 30, frame.size(), true);
    if( !record.isOpened() ) {
        printf("VideoWriter failed to open!\n");
        return -1;
    }

    boost::thread captureThread(captureFunc, &frame, &capture); //start capture thread

    sleep(1); //just to make sure capture thread is ready

    for(;;)
    {
        // add frame to recorded video
        record << frame;
    }

    return 0;
}

经过一番调试后我解决了我的问题;这是 VideoWriter 对输入帧的速率很挑剔的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenCV VideoWriter 帧率问题 的相关文章

  • 是否可以强制 XMLWriter 将元素写入单引号中?

    这是我的代码 var ptFirstName tboxFirstName Text writer WriteAttributeString first ptFirstName 请注意 即使我使用 ptFirstName 也会以双引号结束 p
  • C# 和 Javascript SHA256 哈希的代码示例

    我有一个在服务器端运行的 C 算法 它对 Base64 编码的字符串进行哈希处理 byte salt Convert FromBase64String serverSalt Step 1 SHA256Managed sha256 new S
  • Qt-Qlist 检查包含自定义类

    有没有办法覆盖加载自定义类的 Qt QList 的比较机制 即在 java 中你只需要重写一个比较方法 我有一个带有我的自定义类模型的 QList QList
  • 当我使用“control-c”关闭发送对等方的套接字时,为什么接收对等方的套接字不断接收“”

    我是套接字编程的新手 我知道使用 control c 关闭套接字是一个坏习惯 但是为什么在我使用 control c 关闭发送进程后 接收方上的套接字不断接收 在 control c 退出进程后 发送方的套接字不应该关闭吗 谢谢 我知道使用
  • 获取按下的按钮的返回值

    我有一个在特定事件中弹出的表单 它从数组中提取按钮并将标签值设置为特定值 因此 如果您要按下或单击此按钮 该函数应返回标签值 我怎样才能做到这一点 我如何知道点击了哪个按钮 此时代码返回 DialogResult 但我想从函数返回 Tag
  • pthread_cond_timedwait() 和 pthread_cond_broadcast() 解释

    因此 我在堆栈溢出和其他资源上进行了大量搜索 但我无法理解有关上述函数的一些内容 具体来说 1 当pthread cond timedwait 因为定时器值用完而返回时 它如何自动重新获取互斥锁 互斥锁可能被锁定在其他地方 例如 在生产者
  • 从父类调用子类方法

    a doStuff 方法是否可以在不编辑 A 类的情况下打印 B did stuff 如果是这样 我该怎么做 class Program static void Main string args A a new A B b new B a
  • 未解决的包含:“cocos2d.h” - Cocos2dx

    当我在 Eclipse 中导入 cocos2dx android 项目时 我的头文件上收到此警告 Unresolved inclusion cocos2d h 为什么是这样 它实际上困扰着我 该项目可以正确编译并运行 但我希望这种情况消失
  • WPF 中的调度程序和异步等待

    我正在尝试学习 WPF C 中的异步编程 但我陷入了异步编程和使用调度程序的困境 它们是不同的还是在相同的场景中使用 我愿意简短地回答这个问题 以免含糊不清 因为我知道我混淆了 WPF 中的概念和函数 但还不足以在功能上正确使用它 我在这里
  • 指针问题(仅在发布版本中)

    不确定如何描述这一点 但我在这里 由于某种原因 当尝试创建我的游戏的发布版本进行测试时 它的敌人创建方面不起作用 Enemies e level1 3 e level1 0 Enemies sdlLib 500 2 3 128 250 32
  • 获取没有非标准端口的原始 url (C#)

    第一个问题 环境 MVC C AppHarbor Problem 我正在调用 openid 提供商 并根据域生成绝对回调 url 在我的本地机器上 如果我点击的话 效果很好http localhost 12345 login Request
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • C# 中的递归自定义配置

    我正在尝试创建一个遵循以下递归结构的自定义配置部分
  • 如何衡量两个字符串之间的相似度? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 给定两个字符串text1 and text2 public SOMEUSABLERETURNTYPE Compare string t
  • 从库中捕获主线程 SynchronizationContext 或 Dispatcher

    我有一个 C 库 希望能够将工作发送 发布到 主 ui 线程 如果存在 该库可供以下人员使用 一个winforms应用程序 本机应用程序 带 UI 控制台应用程序 没有 UI 在库中 我想在初始化期间捕获一些东西 Synchronizati
  • C++ 复制初始化和直接初始化,奇怪的情况

    在继续阅读本文之前 请阅读在 C 中 复制初始化和直接初始化之间有区别吗 https stackoverflow com questions 1051379 is there a difference in c between copy i
  • 插入记录后如何从SQL Server获取Identity值

    我在数据库中添加一条记录identity价值 我想在插入后获取身份值 我不想通过存储过程来做到这一点 这是我的代码 SQLString INSERT INTO myTable SQLString Cal1 Cal2 Cal3 Cal4 SQ
  • 如何让Gtk+窗口背景透明?

    我想让 Gtk 窗口的背景透明 以便只有窗口中的小部件可见 我找到了一些教程 http mikehearn wordpress com 2006 03 26 gtk windows with alpha channels https web
  • 如何使用 std::string 将所有出现的一个字符替换为两个字符?

    有没有一种简单的方法来替换所有出现的 in a std string with 转义 a 中的所有斜杠std string 完成此操作的最简单方法可能是boost字符串算法库 http www boost org doc libs 1 46
  • 使用 libcurl 检查 SFTP 站点上是否存在文件

    我使用 C 和 libcurl 进行 SFTP FTPS 传输 在上传文件之前 我需要检查文件是否存在而不实际下载它 如果该文件不存在 我会遇到以下问题 set up curlhandle for the public private ke

随机推荐

  • 使用 Android FFT 获取声音频率

    下面的代码仅显示一个图表 但我想要声音的频率 我正在尝试录制语音并获取实时频率 以便我可以弹奏钢琴或吉他声音并找到频率 public class AudioProcessing extends Activity implements OnC
  • setAttribute 和 htmlElement.attribute='value' 之间的区别

    两者之间有什么区别 b1 setAttribute id b1 and b1 id b1 其中一个比另一个更有效率吗 他们两个都会做完全相同的任务吗 在某些情况下它们会有所不同吗 setAttribute 和 htmlElement att
  • 在 XHTML 1.0 Strict 中,属性值是否需要用引号引起来?

    在 XHTML 1 0 Strict 中 属性值是否需要用引号引起来 例子
  • [显示(提示MVC3

    我正在尝试设置我的模型 以便我可以使用 Html EditorFor e gt e publicationTitle 并让它显示带有提示的水印 目前我正在做 Html LabelFor e gt e PublicationTitle Htm
  • Google BigQuery:滚动计数不同

    我有一个表 其中只是日期和用户 ID 的列表 未聚合 我们定义一个称为活跃用户对于给定日期 通过计算过去 45 天内出现的不同 ID 数量 我正在尝试在 BigQuery 中运行一个查询 该查询每天都会返回该天加上当天的活跃用户数 计算从
  • 如何扩展ZF2骨架应用程序-具有外键的实体

    我的 ZF2 骨架应用程序按照 Zend 用户指南运行良好 但现在我正在兜圈子 试图扩展应用程序 以便专辑的艺术家不再是字符串 而是我的数据库中艺术家表的外键 我已经创建了所有必要的模型 控制器 视图来创建 编辑和查看艺术家 这也工作得很好
  • Instagram API:我想根据标签获取最近的图像,但我只收到我自己的

    我想用Instagram API根据特定标签获取最新图像 当我使用时 https api instagram com v1 tags tag name media recent access token ACCESS TOKEN 我只收到用
  • python print 语句中出现意外 None

    我正在尝试打印连接到其他节点的节点列表 以便我可以查看它们以调试一些围绕图形的 python 代码 我这样做是为了练习 所以我自己设置节点 边 组 我尝试使用 for every type 循环打印出与 myNode 类内部的函数的连接 但
  • Webpack 对 Gatsby 网站上内置模块的重大更改

    我尝试将我的 Gatsby 站点部署到 Netlify 但每当我尝试部署时 我总是收到各种节点模块的这些错误 我尝试制作一个 webpack config js 文件并包含两个建议的解决方案 但均无济于事 我还尝试使用别名而不是后备 将浏览
  • 如何在Windows命令行中运行这个java类?

    package com test01 public class test01 public static void main String args System out println hi 我认为java应用程序启动器非常愚蠢 我已经指
  • 使用 FDM 的 Matlab 2D 波动方程

    以下是我使用 FDM 模拟以高斯源为中心的二维波动方程的 Matlab 代码 我使用 imagesc 函数来输出波 波浪似乎从中心向外扩散 但速度非常缓慢 好像我在某个地方搞砸了 并且输出非常像素化 我究竟做错了什么 clc close a
  • 如何在 flutter 中使用自定义 Clipper 制作弯曲的应用程序栏

    嗨 我是颤振新手 I am trying to make this app bar this is my final goal 我尝试按照一些教程制作弯曲的应用程序栏 但我无法得到与我想要的相同的结果 after some googling
  • INVALID_ARGUMENT:应用程序凭据标头无效。请修复客户端以传递有效的应用程序凭据标头

    当尝试运行简单的 Android Instant App 时 我在控制台中收到此错误 并且应用程序无法打开 此错误是什么意思以及如何传递有效的凭据标头 有一个已知问题 即不允许模拟器与即时应用程序后端通信 从而导致此错误 如果您尝试使用模拟
  • 使用字符串变量作为变量名[重复]

    这个问题在这里已经有答案了 我有一个分配有字符串的变量 我想根据该字符串定义一个新变量 foo bar foo something else What I actually want is bar something else 您可以使用e
  • Plotly:如何检查和更改绘图图形?

    相关问题已经被问过 例如 如何搜索绘图图形特定属性的选项 Plotly 如何检查基本图形结构 版本 4 但这些问题的答案受到以下事实的限制 并非所有参数都可以通过 Python 获得 这意味着真正的答案隐藏在 JavaScript 中的某个
  • 如何合并两个priority_queue?

    我有两个priority queue with float像这样 std priority queue
  • 无法将 Null 值分配给可为 Null 的 Int32?通过绑定

    无法通过 TextBox 绑定将 null 值分配给 Int32 如果 TextBox 为空 则不会调用 Int32Null Set TexBox 周围有红色边框 表示验证异常 这作为 Int32 没有意义 可以为空 如果用户从 TextB
  • AngularJS:绑定到服务属性的正确方法

    我正在寻找如何绑定到 AngularJS 中的服务属性的最佳实践 我已经通过多个示例来了解如何绑定到使用 AngularJS 创建的服务中的属性 下面我有两个示例说明如何绑定到服务中的属性 他们都工作 第一个示例使用基本绑定 第二个示例使用
  • 如何让exe文件只在一台电脑上运行

    我使用 C 编写了一个程序 并使用高级安装程序制作了 exe 文件 它工作得很好 但我想让这个 exe 文件在一台计算机上工作 因为有些 clints 获取 exe 并将此 exe 交给另一个 我想将其保密并保护我的作品 在您想要 exe
  • OpenCV VideoWriter 帧率问题

    我正在尝试将 1080p 网络摄像头的视频录制到文件中 我在视频中设置了一个计时器 在每次试验中 视频播放器 我使用的是 VLC 报告的时间戳与视频中的时间不同步 它总是会关闭几秒钟 通常视频内计时器比玩家报告的时间快 如下所示 我将 C