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

OpenCV - FPS from phone camera not correct

本文关键字:FPS 不正确 摄像头 手机 OpenCV      更新时间:2023-10-16

>我有多个录制的视频样本,当我通过我的程序运行这些样本时,它会返回 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; 
        }
      }
    }
  }

我在计算视频中的 FPS 和帧数时遇到了同样的 opencv 问题。(它为 64 秒的视频返回 90,000 FPS 和 5,758,245 帧数!!根据这个答案:OpenCV仅捕获视频文件中的一小部分帧这是一个OpenCV问题,他们正在努力解决。

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