You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用VideoCapture裁剪视频帧时遭遇TypeError问题求助

解决OpenCV视频帧切片时的TypeError问题

这个错误我之前调试代码时也碰到过,核心问题出在你对cv2.VideoCapture.read()的返回值处理上,我来一步步帮你搞定:

错误根源

cv2.VideoCapture.read()返回的是一个**(ret, frame)**格式的元组:

  • ret是布尔值,用来标记当前帧是否成功读取;
  • frame才是你需要的、可以进行numpy切片的图像数组。

你直接把整个元组赋值给了frame变量,后续对这个元组执行切片操作,自然会抛出tuple indices must be integers or slices, not tuple的错误。

另外还要提个醒:你设置的帧分辨率是100x100,但裁剪范围160:450, 170:470完全超出了这个尺寸,就算解决了当前错误,也会触发新的索引越界问题,得一起调整。

修正后的完整代码

import cv2

# 初始化视频捕获设备
vs = cv2.VideoCapture(1)
# 调整帧分辨率到能容纳你的裁剪范围,比如常用的640x480
vs.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
vs.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)

while True:
    # 正确接收返回值:先判断读取状态,再获取帧数组
    ret, frame = vs.read()
    # 如果读取失败(比如设备断开、视频流结束),直接退出循环
    if not ret:
        print("无法读取视频帧,即将退出")
        break
    
    # 现在frame是标准numpy数组,可以正常执行切片裁剪
    cropped = frame[160:450, 170:470]
    
    # 可选:显示裁剪后的帧,方便调试
    cv2.imshow("Cropped Frame", cropped)
    # 按q键退出循环
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 最后记得释放资源,避免内存泄漏
vs.release()
cv2.destroyAllWindows()

如果你坚持要用100x100的分辨率,那得把裁剪范围调整到合理区间,比如:

cropped = frame[20:80, 20:80]

内容的提问来源于stack exchange,提问作者UnevenMango

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:25:58