用OpenCV库调用电脑摄像头录制一段视频
一、参考代码:
import cv2
# 设置视频捕获对象
cap = cv2.VideoCapture(0)
# 设置视频分辨率和格式
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = int(cap.get(cv2.CAP_PROP_FPS))
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
# 创建视频编写器对象
out = cv2.VideoWriter('face_rotation_video.avi', fourcc, fps, (width, height))
# Main loop to capture the video
while True:
ret, frame = cap.read() # 从摄像头捕获一帧图像,成功ret就是true
if not ret:
break
# 将当前帧写入视频文件
out.write(frame)
# 显示当前帧,这样可视化,方便做出调整,不然只是录制了,你看不到画面
cv2.imshow('Face Rotation Video', frame)
# 按下“q”,则退出循环
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放资源
cap.release()
out.release()
cv2.destroyAllWindows()
二、设置视频分辨率和格式
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
# width: 视频的宽度,以像素为单位。可以通过修改 cv2.CAP_PROP_FRAME_WIDTH 的值来更改宽度。
# 例如,如果想要设置宽度为 640 像素,可以使用 cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)。
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
# 视频的高度 同理。
fps = int(cap.get(cv2.CAP_PROP_FPS))
# 视频的帧率,表示每秒显示的帧数。可以通过修改 cv2.CAP_PROP_FPS 的值来更改帧率。注意,摄像头硬件和驱动程序可能会限制可用的帧率。例如,如果想要设置帧率为 30,可以使用 cap.set(cv2.CAP_PROP_FPS, 30)。
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
# 表示视频编解码器的四字符代码。常见的编解码器有 "MJPG"(Motion-JPEG),"XVID"(MPEG-4),"H264"(H.264/AVC)等。在这个示例中,我们使用了 "MJPG" 编解码器。要更改编解码器,可以将 'MJPG' 替换为其他编解码器的四字符代码,例如 cv2.VideoWriter_fourcc(*'XVID')。
三、拍摄镜像视频
添加:
# 镜像翻转图像
frame = cv2.flip(frame, flipCode=1)
import cv2
# 设置视频捕获对象
cap = cv2.VideoCapture(0)
# 设置视频分辨率和格式
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = int(cap.get(cv2.CAP_PROP_FPS))
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
# 创建视频编写器对象
out = cv2.VideoWriter('face_rotation_video.mp4', fourcc, fps, (width, height))
# Main loop to capture the video
while True:
ret, frame = cap.read() # 从摄像头捕获一帧图像,成功ret就是true
if not ret:
break
# 镜像翻转图像
frame = cv2.flip(frame, flipCode=1)
# 将当前帧写入视频文件
out.write(frame)
# 显示当前帧,这样可视化,方便做出调整,不然只是录制了,你看不到画面
cv2.imshow('Face Rotation Video', frame)
# 按下“q”,则退出循环
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放资源
cap.release()
out.release()
cv2.destroyAllWindows()