OpenCV中VideoCapture的各种用法
cv2.VideoCapture()
是 OpenCV 用于捕获视频流的类,通常用于从摄像头、视频文件或视频流中读取帧。除了 cv2.VideoCapture(0)
用于从默认摄像头捕获视频流,cv2.VideoCapture()
还有很多其他用途和方法。以下是一些常用的用法:
1. 捕获视频文件
你可以用来读取本地视频文件,而不仅仅是摄像头。
cap = cv2.VideoCapture('video.mp4')
2. 读取网络摄像头(多个摄像头)
使用不同的数字参数来选择不同的摄像头,例如 0
是默认的第一个摄像头,1
是第二个摄像头。
cap = cv2.VideoCapture(1) # 使用第二个摄像头
3. 捕获网络视频流
如果你有网络摄像头或视频流的 URL,你可以直接使用该 URL 进行视频捕获。
cap = cv2.VideoCapture('http://192.168.1.100:8080/video')
4. 设置属性(如分辨率、帧率等)
使用 set()
方法来设置摄像头或视频捕获的各种属性,例如分辨率、帧率等。
cap = cv2.VideoCapture(0)
# 设置视频分辨率为 1280x720
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)
# 设置帧率为 30 FPS
cap.set(cv2.CAP_PROP_FPS, 30)
5. 获取属性
使用 get()
方法可以获取当前视频捕获的各种属性,比如宽度、高度、帧率等。
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
fps = cap.get(cv2.CAP_PROP_FPS)
print(f"Width: {width}, Height: {height}, FPS: {fps}")
6. 检查视频是否打开成功
使用 isOpened()
方法检查是否成功打开视频源。
if not cap.isOpened():
print("无法打开摄像头")
7. 逐帧读取视频
使用 read()
方法逐帧读取视频。
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
# 显示帧
cv2.imshow("Frame", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
8. 释放视频捕获对象
用完视频捕获对象后,应该调用 release()
来释放资源。
cap.release()
cv2.destroyAllWindows()
9. 使用编码器保存视频
如果需要保存捕获的视频,可以结合 cv2.VideoWriter
来实现。
# 使用 XVID 编码器
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi', fourcc, 20.0, (640, 480))
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
out.write(frame) # 将帧写入文件
out.release()
cv2.VideoCapture()
非常灵活,既可以用于实时摄像头输入,也可以读取各种视频文件和网络视频流。