无法使用 OpenCV C++从视频中提取帧

Can't extract frames from video using C++ with OpenCV

本文关键字:视频 提取 C++ OpenCV      更新时间:2023-10-16

我想从短.mp4视频中提取所有帧并将它们作为图像保存到文件夹中。但是当我调用函数 cv::VideoCapture::read(( 时,它无法提取帧。我的代码有什么问题?

#include <iostream>
#include <string>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/videoio.hpp>
int main(int argc, const char * argv[]) {
     cv::VideoCapture cap("test.mp4");
     if (!cap.isOpened()) {
         std::cout << "Cannot open the video file.n";
         return -1;
     }
     for (int frame_count = 0; frame_count < cap.get(cv::CAP_PROP_FRAME_COUNT); frame_count++) {
          cap.set(cv::CAP_PROP_POS_FRAMES, frame_count);
          cv::Mat frame;
          if (!cap.read(frame)) {
              std::cout << "Failed to extract a frame.n";
              return -1;
          }
          std::string image_path = "frames/" + std::to_string(frame_count) + ".jpg"; 
          cv::imwrite(image_path, frame);
    }
    return 0;
}

我的输出总是"无法提取帧"。

在上面提供的教程中,有一个说明:

取消选中WITH_FFMPEG

FFMPEG库包含MP4编解码器,您需要检查WITH_FFMPEGUSE_FFMPEG才能读取.mp4和许多其他格式。