文章目录
从相机捕捉视频
- 从相机捕捉视频
- 从相机捕捉图片
需要创建一个VideoCapture对象。它的参数可以是设备索引或者一个视频文件名。
import cv2 as cv
cap = cv.VideoCapture(0) #0代表一个摄像头
print(cap.isOpened())
# 声明编码器和创建 VideoWrite 对象
fourcc = cv.VideoWriter_fourcc(*'XVID')
out = cv.VideoWriter('output.mp4',fourcc, 20.0, (640,480))
while(cap.isOpened()):
ret, frame = cap.read()
if ret==True:
# 写入帧
out.write(frame)
cv.imshow('frame',frame)
if cv.waitKey(0) & 0xFF == ord('q'):
break
else:
break
# 释放已经完成的工作
cap.release()
out.release()
cv.destroyAllWindows()
运行后就会自动保存每一帧合成视频。
cv.VideoCapture(0) 参数0代表一个摄像头,1则两个摄像头,笔记本只有一个摄像头。这里也可以传参视频,不仅仅是摄像头。 cap.read() 返回一个 bool 值(True/False)。如果加载成功,它会返回True。ret: 布尔值; frame: 图像的三维矩阵; 这样 ret 存储布尔值, frame 存储图像。
cap.isOpened() 检查是否初始化。
从相机捕捉图片按q退出,s保存图片为test.jpg
import cv2
cap = cv2.VideoCapture(0) #摄像头开启,也可以传入mp4
# 相机的默认帧大小在Windows或Ubuntu中将为640x480
# cap.isOpened() 返回 true/false, 检查摄像头初始化是否成功
print(cap.isOpened())
# cap.read()
"""
返回两个值
先返回一个布尔值, 如果视频读取正确, 则为 True, 如果错误, 则为 False;
也可用来判断是否到视频末尾;
再返回一个值, 为每一帧的图像, 该值是一个三维矩阵;
通用接收方法为:
ret,frame = cap.read();
ret: 布尔值;
frame: 图像的三维矩阵;
这样 ret 存储布尔值, frame 存储图像;
若使用一个变量来接收两个值, 如:
frame = cap.read()
则 frame 为一个元组, 原来使用 frame 处需更改为 frame[1]
"""
while cap.isOpened():
ret_flag, img_camera = cap.read()
#摄像头图片大小
# print("height: ", img_camera.shape[0])
# print("width: ", img_camera.shape[1])
# print('\n')
cv2.imshow("camera", img_camera)
# 每帧数据延时 1ms, 延时为0, 读取的是静态帧
k = cv2.waitKey(1)
# 按下 's' 保存截图
if k == ord('s'):
cv2.imwrite("test.jpg", img_camera)
# 按下 'q' 退出
if k == ord('q'):
break
# 释放所有摄像头
cap.release()
# 删除建立的所有窗口
cv2.destroyAllWindows()