在 C++ 中结合 OpenCV 库来读取 MP4 视频文件是一个常见的任务。以下是一个简单的示例程序,说明了如何使用 OpenCV 的 VideoCapture
类来打开一个 MP4 文件并逐帧显示每一帧。
VideoCapture::VideoCapture(const string& filename);参数:filename—— 要打开的视频文件的名称;bool VideoCapture::isOpened();isOpened() 函数用于检查 VideoCapture 对象是否已经成功地打开了一个视频文件或摄像头。
如果 VideoCapture 对象已经成功初始化并准备好读取视频帧,
那么 isOpened() 将返回 true;
否则,如果还没有打开视频文件或摄像头,或者打开过程中发生了错误,它将返回 false。
代码:
#include <iostream>
#include <opencv2/opencv.hpp>using namespace std;
using namespace cv;int main()
{// 打开视频文件VideoCapture cap("1.mp4");// 检查是否成功打开文件if (!cap.isOpened()) {cout << "Error opening video file" << endl;return -1;}// 获取视频的帧率double fps = cap.get(CAP_PROP_FPS);cout << "Frames per second using video.get(cv::CAP_PROP_FPS): " << fps << endl;// 循环读取并显示每一帧Mat frame;while (true){// 从视频中读取一帧cap >> frame;// 如果没有读取到帧,则退出循环if (frame.empty()) {break;}// 显示这一帧imshow("Video", frame);// 按键退出if (waitKey(1000 / fps) >= 0){break;}}// 释放资源cap.release();// 销毁所有窗口destroyAllWindows();return 0;
}
#include <iostream>
#include <opencv2/opencv.hpp>using namespace std;
using namespace cv;int main()
{// 打开视频文件VideoCapture cap("1.mp4");// 检查是否成功打开文件if (!cap.isOpened()) {cout << "Error opening video file" << endl;return -1;}// 获取视频的帧率double fps = cap.get(CAP_PROP_FPS);cout << "Frames per second using video.get(cv::CAP_PROP_FPS): " << fps << endl;// 循环读取并显示每一帧Mat frame;while (cap.read(frame))// 从视频中读取一帧{//VideoCapture 类中的 read 函数用于从视频流中读取下一帧。//这个函数返回一个布尔值,表示是否成功读取了一帧。如果读取成功,它会将该帧存储在一个 Mat 对象中。如果到达视频末尾或出现错误,它将返回 false。// 如果没有读取到帧,则退出循环if (frame.empty()) {break;}// 显示这一帧imshow("Video", frame);// 按键退出if (waitKey(1000 / fps) >= 0){break;}}// 释放资源cap.release();// 销毁所有窗口destroyAllWindows();return 0;
}