QT opencv实现打开打开摄像头时开始录像,关闭摄像头时停止录像并保存在本地
时间: 2024-05-06 12:16:46 浏览: 151
实现该功能需要以下步骤:
1. 安装OpenCV库并配置Qt项目中的OpenCV
2. 打开摄像头并捕获视频帧
```
cv::VideoCapture cap(0); //打开默认的摄像头
if(!cap.isOpened()) //检查是否打开成功
{
qDebug() << "Error opening video stream or file";
return -1;
}
cv::Mat frame; //用于存储每一帧图像
while(true)
{
cap >> frame; //捕获视频帧
if(frame.empty()) //检查是否捕获到有效帧
break;
cv::imshow("Camera", frame); //显示摄像头捕获的图像
cv::waitKey(1);
}
cap.release(); //释放摄像头
cv::destroyAllWindows(); //关闭显示窗口
```
3. 开始录像
```
cv::VideoWriter writer; //定义视频编码器
writer.open("output.avi", cv::VideoWriter::fourcc('M','J','P','G'), 30, cv::Size(cap.get(cv::CAP_PROP_FRAME_WIDTH), cap.get(cv::CAP_PROP_FRAME_HEIGHT))); //打开输出文件,设置视频编码器、帧率和视频尺寸
while(true)
{
cap >> frame; //捕获视频帧
if(frame.empty()) //检查是否捕获到有效帧
break;
writer.write(frame); //将帧写入视频编码器
cv::imshow("Camera", frame); //显示摄像头捕获的图像
cv::waitKey(1);
}
writer.release(); //释放视频编码器
cap.release(); //释放摄像头
cv::destroyAllWindows(); //关闭显示窗口
```
4. 关闭摄像头并保存视频
```
cv::VideoWriter writer;
if(writer.open("output.avi", cv::VideoWriter::fourcc('M','J','P','G'), 30, cv::Size(cap.get(cv::CAP_PROP_FRAME_WIDTH), cap.get(cv::CAP_PROP_FRAME_HEIGHT))))
{
cv::Mat frame;
while(true)
{
cap >> frame;
if(frame.empty())
break;
writer.write(frame);
cv::imshow("Camera", frame);
cv::waitKey(1);
}
writer.release();
}
cap.release();
cv::destroyAllWindows();
```
注意,如果要实现录制时开始和停止的功能,可以使用一个标志变量来控制录像过程。例如:
```
bool isRecording = false; //标志变量,表示是否正在录像
cv::VideoWriter writer;
while(true)
{
cap >> frame;
if(frame.empty())
break;
if(isRecording) //如果正在录像,则将帧写入视频编码器
writer.write(frame);
cv::imshow("Camera", frame);
int key = cv::waitKey(1);
if(key == 's') //按下's'键开始录像
{
isRecording = true;
writer.open("output.avi", cv::VideoWriter::fourcc('M','J','P','G'), 30, cv::Size(cap.get(cv::CAP_PROP_FRAME_WIDTH), cap.get(cv::CAP_PROP_FRAME_HEIGHT)));
}
else if(key == 'q') //按下'q'键停止录像并保存
{
isRecording = false;
writer.release();
}
}
cap.release();
cv::destroyAllWindows();
```
阅读全文