OpenCV - 手机摄像头的FPS不正确

时间:2014-02-18 10:54:24

标签: c++ opencv video video-processing frame-rate

我有多个录制的视频样本,当我通过我的程序运行它时,它返回FPS等。它对我的所有视频样本都很准确(见下表)但是当我运行通过我的智能手机拍摄的视频样本时,它将返回90000的FPS,这通过我的智能手机捕获的每个视频都会发生,因此它不仅仅是单个视频文件存在问题。

File              Actual FPS          OpenCV FPS          ffmpeg FPS

action-60fps         60                   59                  60


action-24fps         24                   24                  24


phone_panning        29                  90000                29

是什么导致了这个问题?

编辑:管理忘记添加我的代码...

  VideoCapture capture(argv[1]);
  Mat frame;
  if(capture.isOpened()) {
    int fps = capture.get(CV_CAP_PROP_FPS);
    int width = capture.get(CV_CAP_PROP_FRAME_WIDTH);
    int height = capture.get(CV_CAP_PROP_FRAME_HEIGHT);
    cout << "FPS: " << fps << ", width: " << width << ", height: " << height << endl;
    VideoWriter writer("output.mpg",
    CV_FOURCC('P','I','M','1'), fps, cvSize(width, height), 0); // 0 means gray, 1 means color
    if(writer.isOpened()) {
      while(true) {
        capture >> frame;
        if(!frame.empty()) {
          imshow("Video", frame);
        }
        Mat frame_gray = frame.clone();
        cvtColor(frame, frame_gray, CV_RGB2GRAY);
        writer << frame_gray;
        int key = waitKey(25);
        if((char)key == 'q') { 
          break; 
        }
      }
    }
  }

1 个答案:

答案 0 :(得分:0)

我在计算视频中的FPS和帧数时遇到了与opencv相同的问题。 (它为FPS返回90,000,为64秒视频返回5,758,245帧数!) 根据这个答案: OpenCV captures only a fraction of the frames from a video file 它是一个opencv问题,他们正在研究它。

另一个原因可能是文件头问题,我的是转换视频格式引起的。我通过使用原始视频格式mp4而不是avi来解决它。