Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
opencv写入视频的速度是否低于实际设置速度?;_Opencv_Video Capture - Fatal编程技术网

opencv写入视频的速度是否低于实际设置速度?;

opencv写入视频的速度是否低于实际设置速度?;,opencv,video-capture,Opencv,Video Capture,我想用opencv写一个视频文件。当我将帧速率设置为20时,写入每帧的时间应为50毫秒,但当我获得写入每帧的时间时,每3到4帧就有一帧,这花费了很多时间,大约63毫秒。这导致我使用opencv写入的视频时长比实际录制时长更短。 我的代码如下 Mat frame; VideoCapture cap(0, CAP_DSHOW); cap.set(3, 640); cap.set(4, 480); cap.set(CV_CAP_PROP_FPS, 20); VideoWriter video(&qu

我想用opencv写一个视频文件。当我将帧速率设置为20时,写入每帧的时间应为50毫秒,但当我获得写入每帧的时间时,每3到4帧就有一帧,这花费了很多时间,大约63毫秒。这导致我使用opencv写入的视频时长比实际录制时长更短。 我的代码如下

Mat frame;
VideoCapture cap(0, CAP_DSHOW);

cap.set(3, 640);
cap.set(4, 480);
cap.set(CV_CAP_PROP_FPS, 20);
VideoWriter video("test.avi", CV_FOURCC('X', 'V', 'I', 'D'), 20, Size(640, 480));

clock_t start, ends;
while (cap.isOpened()) {

    start = clock();

    cap >> frame;
    if (frame.empty()) break;
    video << frame;
    imshow("Frame1", frame);
    waitKey(1);
    if (_kbhit()) {
        int ch = _getch();
        if (ch == 27) break;
    }

    ends = clock();
    cout << ends - start << endl;

}
cap.release();
video.release();
destroyAllWindows();
Mat框架;
视频捕获上限(0,上限显示);
第三套(3640);
第2组(4480);
封盖套件(CV、封盖、道具、FPS,20);
VideoWriter视频(“test.avi”,CV_FOURCC('X','V','I','D'),20,尺寸(640480));
时钟开始,结束;
while(cap.isOpened()){
开始=时钟();
cap>>框架;
如果(frame.empty())中断;

视频您正在从照相机获取帧

你确实要求20 fps,但它可能无法精确地做到这一点

它也可能会决定给你更少的帧,因为它必须曝光更长的时间,因为光线补偿较低(如果启用的话)

你的一些假设完全无效。我希望我能设法向你指出

如果你“录制一段5分钟的视频”,你已经对你是如何做到这一点保密了,所以我们不能依赖你的说法


如果还有问题,您需要提供更多信息,例如在什么时间段内的精确帧数,以及在从相机读取时不必写入文件就可以证明这一点。

视频编码是昂贵的。告诉您写入20 fps,您只需告诉您必须如何解释视频,这并不能告诉您需要如何解释视频关于你的系统编码/写入帧的速度。使用更快的PC,使用缓冲+线程和/或如果你已经有硬件编码器(例如许多intel CPU),使用允许硬件加速编码/写入的VideoWriter后端(你必须用谷歌搜索)…我会试试看,谢谢你的回复。事实上,我在图片的每一帧上都写下了我的本地时间。我刚刚重新录制了一段606s的视频,但获得的视频只有11758帧,也就是588s。我用这段代码来获取时间
timebt;ftime(&t);tm*ltm=localtime(&t.time);time\u str=to\u string(1900+ltm->tm\u year)+“”+to\u string(1+ltm->tm-mon)+“+to-string(ltm->tm-mday)+”+“+to-string(ltm->tm-hour)++”:“+\to-string(ltm->tm-min)++”:“+to-string(ltm->tm-sec)+”+\to-string(t.millitm);
并使用此代码编写每帧的时间,
putText(帧、时间、点(100、80)、字体(1、标量(255、0、0、0)、2)
谢谢您的回复