cv::VideoWriter
是 OpenCV 中的一个类,用于将图像序列保存为视频文件。它提供了一个方便的方法,可以将一系列帧以特定的编码方式写入视频文件,从而创建自定义的视频。
cv::VideoWriter(const String& filename, int fourcc, double fps, Size frameSize, bool isColor = true);
参数
filename: 要保存的输出视频文件的文件名,可以包括文件扩展名(如 ".avi"、".mp4" 等)。
fourcc: 一个四字符编码,用于指定视频编解码器。通常,使用四字符编码是指定视频文件的编码方式。例如,cv::VideoWriter::fourcc('M', 'J', 'P', 'G') 表示使用 MJPEG 编码器,cv::VideoWriter::fourcc('X', 'V', 'I', 'D') 表示使用 XVID 编码器。你可以根据需要选择合适的编码器。
fps: 视频的帧率,表示每秒显示的帧数。
frameSize: 视频帧的大小,通常是一个 cv::Size 对象,包括宽度和高度。
isColor: 一个布尔值,指示是否保存彩色视频。如果为 true,则保存彩色视频,如果为 false,则保存灰度视频。
#include
int main() {
// 打开摄像头或加载视频文件
cv::VideoCapture cap(0); // 0 表示默认摄像头
if (!cap.isOpened()) {
std::cerr << "Error: Could not open camera!" << std::endl;
return -1;
}
// 获取摄像头的帧宽度和帧高度
int frameWidth = static_cast<int>(cap.get(cv::CAP_PROP_FRAME_WIDTH));
int frameHeight = static_cast<int>(cap.get(cv::CAP_PROP_FRAME_HEIGHT));
// 创建 VideoWriter 对象来保存视频
cv::VideoWriter videoWriter("output.avi", cv::VideoWriter::fourcc('M','J','P','G'), 30, cv::Size(frameWidth, frameHeight));
if (!videoWriter.isOpened()) {
std::cerr << "Error: Could not create video file!" << std::endl;
return -1;
}
cv::Mat frame;
while (true) {
// 读取一帧视频
cap >> frame;
if (frame.empty()) {
// 如果没有帧可读,退出循环
break;
}
// 在这里可以对帧进行处理
// 写入帧到视频文件
videoWriter.write(frame);
// 显示帧
cv::imshow("Video", frame);
// 检测按键,如果按下 'q' 键则退出循环
if (cv::waitKey(30) == 'q') {
break;
}
}
// 释放摄像头和 VideoWriter 资源
cap.release();
videoWriter.release();
cv::destroyAllWindows();
return 0;
}