OpenCV3 C++ 实现视频读取与写入完整示例
本文介绍如何使用OpenCV3和C++进行视频读取与写入操作。通过VideoCapture类打开视频文件或调用摄像头获取帧,并利用VideoWriter类将处理后的帧写入新视频文件。示例代码展示了如何获取视频宽高、设置编码格式及帧率,并包含简单的图像预处理步骤,帮助开发者快速掌握视频流处理的核心方法。
视频读取基础
视频读取
在OpenCV中,视频读取主要依赖于VideoCapture类。该类提供了打开视频源并逐帧获取图像数据的功能。以下代码演示了如何初始化VideoCapture对象并打开指定的视频文件。
#include<iostream>
#include<opencv2/opencv.hpp>
using namespace cv;
int main()
{
VideoCapture capture;
Mat frame;
frame= capture.open("E:/image/a1.avi");
if(!capture.isOpened())
{
printf("can not open ...\n");
return -1;
}
namedWindow("output", CV_WINDOW_AUTOSIZE);
while (capture.read(frame))
{
imshow("output", frame);
waitKey(10);
}
capture.release();
return 0;
}
当capture.open()函数的参数设置为0时,表示从默认摄像头设备读取实时视频流,而非本地文件。
frame= capture.open(0);
视频写入实现
视频写入
若需通过摄像头捕获视频并保存,首先需使用capture.get(CV_CAP_PROP_FRAME_WIDTH)和capture.get(CV_CAP_PROP_FRAME_HEIGHT)获取当前视频帧的分辨率(宽度和高度)。随后,创建一个VideoWriter类的实例对象writer,用于指定输出文件路径、编码格式、帧率及视频尺寸,从而执行视频写入操作。
在正式写入视频前,通常需要对获取的帧进行必要的预处理或简单处理,以优化最终输出的视频质量或满足特定格式要求。
#include<iostream>
#include<opencv2/opencv.hpp>
using namespace cv;
int main()
{
VideoCapture capture;
capture.open(0);
if(!capture.isOpened())
{
printf("can not open ...\n");
return -1;
}
Size size = Size(capture.get(CV_CAP_PROP_FRAME_WIDTH), capture.get(CV_CAP_PROP_FRAME_HEIGHT));
VideoWriter writer;
writer.open("E:/image/a2.avi", CV_FOURCC('M', 'J', 'P', 'G'), 10, size, true);
Mat frame, gray;
namedWindow("output", CV_WINDOW_AUTOSIZE);
while (capture.read(frame))
{
//转换为黑白图像
cvtColor(frame, gray, COLOR_BGR2GRAY);
//二值化处理
threshold(gray, gray, 0, 255, THRESH_BINARY | THRESH_OTSU);
cvtColor(gray, gray, COLOR_GRAY2BGR);
imshow("output", gray);
writer.write(gray);
waitKey(10);
}
waitKey(0);
capture.release();
return 0;
}

以上即为OpenCV3结合C++实现视频读取与写入的完整流程。希望上述内容能为您提供参考,欢迎继续支持本站获取更多技术分享。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













