欢迎访问宙启技术站
智能推送

OpenCV2从摄像头获取帧并写入视频文件的示例分析

发布时间:2023-05-14 22:41:44

OpenCV是一个计算机视觉库,它提供了许多常用的算法和函数,可以帮助我们在图像和视频处理中实现各种功能。本文将介绍如何使用OpenCV从摄像头获取帧,并将帧写入视频文件中。

代码示例:

import cv2

cap = cv2.VideoCapture(0)

fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi', fourcc, 20.0, (640, 480))

while True:
    ret, frame = cap.read()
    if ret == True:
        out.write(frame)
        cv2.imshow('frame', frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        break

cap.release()
out.release()
cv2.destroyAllWindows()

上述代码使用OpenCV从默认的 个摄像头获取帧,并将其写入名为output.avi的视频文件中。视频文件的压缩格式为XVID,每秒帧率为20,分辨率为640x480。

while循环用于持续从摄像头读取帧,读取的帧被写入视频文件中,并在窗口中显示。如果按下q键,则退出while循环。

最后一行代码释放摄像头和视频文件,关闭所有窗口。

代码解析:

1. 导入OpenCV库:

import cv2

2. 打开摄像头:

cap = cv2.VideoCapture(0)

这里使用cv2.VideoCapture()函数,其中参数0表示默认的 个摄像头,也可以指定其他摄像头的索引。

3. 设置视频文件格式和属性:

fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi', fourcc, 20.0, (640, 480))

使用cv2.VideoWriter_fourcc()函数设置压缩格式为XVID,这里使用了星号(*)进行解包操作。设置每秒帧率为20,分辨率为640x480。

4. 读取帧并处理:

ret, frame = cap.read()
if ret == True:
    out.write(frame)
    cv2.imshow('frame', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
else:
    break

使用cap.read()函数读取一帧图像,并使用ret变量来检查是否成功读取帧。如果ret为True,则将帧写入视频文件中并在窗口中显示。

cv2.waitKey(1)函数等待1毫秒以允许下一帧被读取,并检查是否按下q键。如果按下q键,则while循环被终止。

如果ret为False,则break语句被执行跳出循环。

5. 释放资源:

cap.release()
out.release()
cv2.destroyAllWindows()

使用cap.release()和out.release()释放摄像头和视频文件资源。使用cv2.destroyAllWindows()关闭所有窗口。

总结:

本文介绍了如何使用OpenCV从摄像头获取帧,并将帧写入视频文件中。使用cv2.VideoCapture()函数打开摄像头,使用cv2.VideoWriter()函数设置视频文件格式和属性。使用cap.read()函数读取帧进行处理,并使用cv2.imshow()函数在窗口中显示帧。最后使用cap.release()和out.release()释放资源,使用cv2.destroyAllWindows()关闭窗口。