[英]Can't extract frames from video using C++ with OpenCV
I want to extract all frames from a short .mp4 video and save them as images to folder.我想从一个简短的 .mp4 视频中提取所有帧并将它们作为图像保存到文件夹中。 But when I call a function cv::VideoCapture::read() it fails to extract a frame.但是当我调用函数 cv::VideoCapture::read() 时,它无法提取帧。 What is the problem with my code?我的代码有什么问题?
#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;
}
My output is always "Failed to extract a frame.".我的输出总是“无法提取帧。”。
On the tutorial you provided above , there is an instruction:在您上面提供的教程中,有一条说明:
Uncheck WITH_FFMPEG取消选中 WITH_FFMPEG
ffmpeg library contains mp4 codecs, you need to check WITH_FFMPEG
and USE_FFMPEG
in order to read .mp4 and many other formats. ffmpeg 库包含 mp4 编解码器,您需要检查WITH_FFMPEG
和USE_FFMPEG
以读取 .mp4 和许多其他格式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.