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) &gt;= 30) break;

    您为 VideoWriter 指定 15fps,但您测量的时间是播放(和写入)视频所花费的时间。 (这完全是任意的)

如果您的输入视频是以不同于 15fps 的帧速率录制的,您必须自己通过丢弃或复制帧来处理该比率。

如果你到达30 * 15,你最好数帧并停止。

【讨论】:

您好,我查过了。现在我得到 30 秒的视频。但捕获在 30 秒前结束。即,exe 在 30 秒内完成运行。我不能两个都沉下去吗?我有需要做的。所以请指教。 请注意,播放与任何时钟同步。您测量的时间用于检索和编写框架。您的机器似乎需要超过 30 秒才能处理 30 秒。一段视频,就是这样。那就去计算帧数吧! 长话短说:恕我直言,对播放/写入过程进行计时的想法一开始就是个坏主意。它与录制的视频序列无关

以上是关于openCV录制视频的主要内容,如果未能解决你的问题,请参考以下文章

在android中使用OpenCV录制视频

在 opencv 中录制视频仅 30 秒

在 Opencv 的 UYVY 编解码器中录制视频

使用 opencv 和 Qt 录制视频

在 Tkinter 主循环期间录制 OpenCV 视频

OpenCV:录制扭曲的视频