openCV录制视频
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了openCV录制视频相关的知识,希望对你有一定的参考价值。
本人新买了一个摄像头,安装了openCV,用测试软件录制视频时发现,录下的视频均被压缩成了1,2秒,播放一下就结束了,请问怎么回事?
参考技术A 这谁知道! 代码?追问是购买时附带的软件,装了openCV就直接用的
在 opencv 中录制视频仅 30 秒
【中文标题】在 opencv 中录制视频仅 30 秒【英文标题】:Record a video in opencv only for 30 secs 【发布时间】:2013-05-22 14:04:55 【问题描述】:如何在 opencv 中仅录制 30 秒的视频。我使用了下面的代码,但它只录制了 24 秒的视频?有什么问题?
#include "opencv2/objdetect/objdetect.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/contrib/contrib.hpp"
#include <stdio.h>
#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
#include <stdlib.h>
#include <time.h>
using namespace cv;
using namespace std;
int ex = 1734701162;
int main( int argc, const char** argv )
VideoCapture cap(0);
int i_fps = 15;
time_t start = time(0);
string OutputVideoPath = "output.mov";
VideoWriter outputVideo(OutputVideoPath, ex, i_fps, Size(640,480), true);
if(!cap.isOpened())
cout << "Not opened" << endl; // check if we succeeded
return -1;
while ( 1 )
Mat frame;
cap >> frame;
outputVideo << frame;
if ( difftime( time(0), start) == 30) break;
outputVideo.release();
cap.release();
return 0;
【问题讨论】:
【参考方案1】:这里有两件事:
您正在检查墙上时间。 difftime 返回一个双精度值,因此您不太可能得到 exactly 30 作为结果。改为这样:if ( difftime( time(0), start) >= 30) break;
您为 VideoWriter 指定 15fps,但您测量的时间是播放(和写入)视频所花费的时间。 (这完全是任意的)
如果您的输入视频是以不同于 15fps 的帧速率录制的,您必须自己通过丢弃或复制帧来处理该比率。
如果你到达30 * 15
,你最好数帧并停止。
【讨论】:
您好,我查过了。现在我得到 30 秒的视频。但捕获在 30 秒前结束。即,exe 在 30 秒内完成运行。我不能两个都沉下去吗?我有需要做的。所以请指教。 请注意,播放不与任何时钟同步。您测量的时间用于检索和编写框架。您的机器似乎需要超过 30 秒才能处理 30 秒。一段视频,就是这样。那就去计算帧数吧! 长话短说:恕我直言,对播放/写入过程进行计时的想法一开始就是个坏主意。它与录制的视频序列无关以上是关于openCV录制视频的主要内容,如果未能解决你的问题,请参考以下文章