Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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
C++ OpenCV-通过播放大幅提高帧速率_C++_Performance_Opencv - Fatal编程技术网

C++ OpenCV-通过播放大幅提高帧速率

C++ OpenCV-通过播放大幅提高帧速率,c++,performance,opencv,C++,Performance,Opencv,在OpenCV中,有一种方法可以显著提高视频的帧速率(.mp4)。我尝试了多种方法来增加视频的播放,包括: 增加帧速率: cv.SetCaptureProperty(cap,cv.cv\u cap\u PROP\u FPS,int XFRAMES) 跳过帧: for(inti=0;i

在OpenCV中,有一种方法可以显著提高视频的帧速率(.mp4)。我尝试了多种方法来增加视频的播放,包括:

增加帧速率:

cv.SetCaptureProperty(cap,cv.cv\u cap\u PROP\u FPS,int XFRAMES)

跳过帧:

for(inti=0;i

&

video.set(CV\u CAP\u PROP\u POS\u帧,(双)下一帧编号)

有没有其他方法可以达到预期的效果?如有任何建议,将不胜感激

更新 我只是想澄清一下,回放的速度并不慢,我只是在寻找一种让它更快的方法

您正在使用旧的API(cv.CaptureFromFile)从视频文件中进行捕获

如果你使用新的C++ API,你可以按你想要的速率来抓取框架。下面是一个非常简单的示例代码:

#include "opencv2/opencv.hpp"

using namespace cv;

int main(int, char**)
{
    VideoCapture cap("filename"); // put your filename here

    namedWindow("Playback",1);

    int delay = 15; // 15 ms between frame acquisitions = 2x fast-forward

    while(true)
    {
        Mat frame;
        cap >> frame; 
        imshow("Playback", frame);
        if(waitKey(delay) >= 0) break;
    }

    return 0;
}
基本上,您只需在每个循环中获取一帧,然后使用
cvWaitKey()
在帧之间等待。每帧之间等待的毫秒数将设置加速比。在这里,我放15毫秒,所以这个例子将以大约两倍的速度播放30 fps的视频(减去抓取一帧所需的时间)


另一种选择是,如果您真的想控制从视频文件中获取图像的方式和内容,可以使用gstreamerapi获取图像,然后转换为OpenCV进行图像处理。你可以在这篇文章中找到一些信息:

请编辑你的问题,以显示重现问题的代码量。我们无法回答为什么播放速度慢,直到您显示生成它的代码。抱歉,我不认为这是必要的,我只是使用简单的基础来播放视频,没有检测或识别。帧速率现在还可以,但我的意思是用最少的代码来大幅提高播放速度。(就像看快进视频一样)。。。回家后,我会用我的代码摘录进行更新。+1对于mjpeg流媒体和解码,从未考虑过GstreamerYes,
VideoCapture
似乎以最高速度运行,但它看起来是单线程的,因此您可能会看到接近实时的速度,并假设捕获确实以该速度生成帧。这就是我的情况。