c语言opencv中摄像头视频采集并保存
时间: 2024-01-27 13:11:09 浏览: 80
下面是一个简单的例子,演示如何使用OpenCV在C语言中捕获摄像头视频并将其保存为AVI文件。
首先,需要包含OpenCV的头文件和标准C库头文件:
```c
#include <opencv2/opencv.hpp>
#include <stdio.h>
```
然后,定义一些常量和变量,例如视频宽度、高度和帧率:
```c
#define WIDTH 640
#define HEIGHT 480
#define FPS 30
int main() {
// 创建视频捕获对象
cv::VideoCapture cap(0);
if (!cap.isOpened()) {
fprintf(stderr, "Failed to open camera\n");
return 1;
}
// 设置视频捕获参数
cap.set(cv::CAP_PROP_FRAME_WIDTH, WIDTH);
cap.set(cv::CAP_PROP_FRAME_HEIGHT, HEIGHT);
cap.set(cv::CAP_PROP_FPS, FPS);
// 创建视频编码器
cv::VideoWriter writer("output.avi", cv::VideoWriter::fourcc('M', 'J', 'P', 'G'), FPS, cv::Size(WIDTH, HEIGHT));
if (!writer.isOpened()) {
fprintf(stderr, "Failed to create video writer\n");
return 1;
}
// 捕获视频并保存
cv::Mat frame;
while (true) {
// 从摄像头读取一帧
cap.read(frame);
if (frame.empty()) {
fprintf(stderr, "Failed to read frame\n");
break;
}
// 显示当前帧
cv::imshow("frame", frame);
// 将当前帧写入视频文件
writer.write(frame);
// 按下ESC键退出
if (cv::waitKey(1) == 27) {
break;
}
}
// 释放资源
cap.release();
writer.release();
cv::destroyAllWindows();
return 0;
}
```
在这个例子中,首先创建了一个名为“cap”的视频捕获对象,并使用“cap.isOpened()”函数检查是否成功打开了摄像头。然后,使用“cap.set()”函数设置视频捕获的宽度、高度和帧率。
接下来,创建了一个名为“writer”的视频编码器对象,并使用“writer.isOpened()”函数检查是否成功创建了输出视频文件。在主循环中,使用“cap.read()”函数从摄像头读取一帧,并使用“cv::imshow()”函数显示当前帧。然后,将当前帧写入输出视频文件中,使用“cv::waitKey()”函数等待用户按下ESC键退出循环。
最后,释放了所有资源,并返回0表示程序正常结束。
阅读全文