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() 非常灵活,既可以用于实时摄像头输入,也可以读取各种视频文件和网络视频流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值