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
C++ 如何使用opencv计算视频的fps(带处理)_C++_Opencv_Frame Rate_Opencv3.1 - Fatal编程技术网

C++ 如何使用opencv计算视频的fps(带处理)

C++ 如何使用opencv计算视频的fps(带处理),c++,opencv,frame-rate,opencv3.1,C++,Opencv,Frame Rate,Opencv3.1,我似乎无法找出我所拥有的代码片段的错误所在…出于某种原因,它一直以200 fps的速度输出。我使用OpenCV进行了测试,未经处理的视频速度约为30 fps int n_frame = 0; Mat previous; auto start = chrono::high_resolution_clock::now(); while (m_cap.isOpened()) { if (n_frame % 100 == 1) { auto end = chrono::high_

我似乎无法找出我所拥有的代码片段的错误所在…出于某种原因,它一直以200 fps的速度输出。我使用OpenCV进行了测试,未经处理的视频速度约为30 fps

int n_frame = 0;
Mat previous;
auto start = chrono::high_resolution_clock::now();
while (m_cap.isOpened()) {
    if (n_frame % 100 == 1) {
        auto end = chrono::high_resolution_clock::now();    
        auto time = chrono::duration_cast<chrono::seconds>(end - start);
        cout << "the fps is: " << 1.0 / (static_cast<double>(time.count()) / n_frame) << endl;
        //cin.ignore(1000, '\n');
    }
    n_frame++;
    cout << "frame number: " << n_frame << endl;
    Mat frame, original;

    m_cap >> frame;
    if (frame.empty())
        break;


//do some video processing down here eg thresholding
}
int n_frame=0;
前垫;
自动启动=时钟::高分辨率时钟::现在();
而(m_cap.isOpened()){
如果(n_帧%100==1){
自动结束=时钟::高分辨率时钟::现在();
自动时间=计时::持续时间(结束-开始);

cout我想你忘了重新初始化开始时间,这里是修改过的代码,这提供了一致的fps值,我在笔记本电脑上测试得到了33.2左右,我只计算了100帧,然后重新初始化了所有内容,这似乎有效

int n_frame = 0;
Mat previous;
auto start = std::chrono::high_resolution_clock::now();
VideoCapture m_cap(0);

while (m_cap.isOpened()) {
    n_frame++;
    if (n_frame == 100) {
        auto end = std::chrono::high_resolution_clock::now();
        auto time = std::chrono::duration_cast<chrono::seconds>(end - start);
        cout << "the fps is: " << (n_frame / static_cast<double>(time.count())) << endl;
        start = end;
        n_frame = 0;
    }
    //cout << "frame number: " << n_frame << endl;
    Mat frame, original;
    m_cap >> frame;
    if (frame.empty())
        break;
}
int n_frame=0;
前垫;
自动启动=标准::时钟::高分辨率时钟::现在();
视频捕获m_cap(0);
而(m_cap.isOpened()){
n_frame++;
如果(n_帧==100){
自动结束=标准::时钟::高分辨率时钟::现在();
自动时间=标准::计时::持续时间(结束-开始);

谢谢,这似乎已经解决了…虽然现在是18点左右…我想我需要看看是什么让处理速度慢了这么多