OpenCV2实现摄像头视频捕获与文件写入
本文介绍使用OpenCV2从摄像头获取视频帧并保存为视频文件的方法。核心步骤包括初始化VideoCapture读取帧,利用VideoWriter指定路径、帧率及宽高进行写入。特别指出当编解码参数设为-1时,程序运行会弹出对话框供用户手动选择编码格式,且目标目录必须预先存在。
以下展示一段基于OpenCV2库编写的示例代码。
该代码的主要功能是从连接的摄像头中实时获取视频帧,并将这些帧数据写入到指定的视频文件中。
在操作过程中需注意,视频文件保存的目标路径必须真实存在,例如D:/images/1.avi,其中images目录需提前创建。在调用VideoWriter类对象的open成员函数时,若将编解码方式参数设置为-1,程序在运行时会弹出对话框,要求用户手动选择具体的编解码方式。
#include<opencv2\highgui\highgui.hpp>
#include<opencv2\imgproc\imgproc.hpp>
#include<opencv2\core\core.hpp>
int main()
{
//打开摄像头
cv::VideoCapture captrue(0);
//视频写入对象
cv::VideoWriter write;
//写入视频文件名
std::string outFlie = "D:/1.avi";
//获得帧的宽高
int w = static_cast<int>(captrue.get(CV_CAP_PROP_FRAME_WIDTH));
int h = static_cast<int>(captrue.get(CV_CAP_PROP_FRAME_HEIGHT));
cv::Size S(w, h);
//获得帧率
double r = captrue.get(CV_CAP_PROP_FPS);
//打开视频文件,准备写入
write.open(outFlie, -1, r, S, true);
//打开失败
if (!captrue.isOpened())
{
return 1;
}
bool stop = false;
cv::Mat frame;
//循环
while (!stop)
{
//读取帧
if (!captrue.read(frame))
break;
cv::imshow("Video", frame);
//写入文件
write.write(frame);
if (cv::waitKey(10) > 0)
{
stop = true;
}
}
//释放对象
captrue.release();
write.release();
}
以上关于OpenCV2从摄像头获取帧并写入视频文件的方法分享完毕,希望能为读者提供有效的参考,也欢迎大家继续支持本站获取更多技术内容。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













