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

OpenCV程序报错:index 1920超出axis 0边界(size为1080)

解决OpenCV索引越界错误:"index 1920 is out of bounds for axis 0 with size 1080"

运行OpenCV视频处理程序时触发索引越界错误,错误信息为index 1920 is out of bounds for axis 0 with size 1080。手动将变量w的值从1920改为1079后程序可临时运行,但需要从根源修正逻辑问题。

错误原因

OpenCV中图像以NumPy数组存储,数组索引遵循**(行, 列)的顺序,对应图像的(高度h, 宽度w)**:

  • 行的索引范围是0 ~ h-1(h为图像高度,即shape[0])
  • 列的索引范围是0 ~ w-1(w为图像宽度,即shape[1])

代码中存在两处核心索引逻辑错误:

  1. thresh[0,(h-i)]:错误将行索引固定为0,列索引设为h-i。若图像高度h大于宽度w,h-i会超出列索引范围
  2. thresh[w,(h-i)]:直接将宽度值w作为行索引,而行数仅为h=1080,最大行索引为1079,1920远大于该值,直接触发越界错误

你的需求是获取第h-i行的最左侧(第0列)和最右侧(第w-1列)像素,因此索引顺序完全搞反了。

修正后的代码

import cv2            # OpenCV,计算机视觉库
import time   # 导入time模块

pTime = 0  # 初始化时间变量

cap = cv2.VideoCapture("segment4_pumping_and_foiling.mp4") # 打开视频文件
cv2.namedWindow("video", cv2.WND_PROP_FULLSCREEN)   # 创建全屏窗口
cv2.setWindowProperty("video", cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN) # 设置窗口为全屏

while True:    # 循环播放视频
  success, img = cap.read()  # 读取视频帧
  if not success:  # 处理视频读取完毕的情况
      break
  
  h, w, c = img.shape  # 获取图像的高、宽、通道数

  cTime = time.time()  # 获取当前时间
  fps = 1 / (cTime - pTime) # 计算帧率
  pTime = cTime      # 更新时间变量
  cv2.putText(img, str(int(fps)), (70, 50), cv2.FONT_HERSHEY_PLAIN, 3,(255, 0, 0), 3) # 在图像上绘制帧率
 
  ret,thresh = cv2.threshold(img,206,210,cv2.THRESH_BINARY)
  
  point0=(0,h)
  pointw=(w,h)
  for i in range(200):
      row_idx = h - i
      if row_idx < 0:  # 防止行索引小于0
          break
      # 修正索引顺序:(行, 列)
      (b0, g0, r0)=thresh[row_idx, 0]
      (bw, gw, rw)=thresh[row_idx, w-1]
      if (b0>200 and g0>200 and r0>200):
          point0=(0, row_idx)
      if (bw>200 and gw>200 and rw>200):
          pointw=(w, row_idx)
  
  image = cv2.line(thresh, (0, 830), (w, 830), (0, 255, 0), 4)
  image = cv2.line(thresh, point0, pointw, (0, 255, 255), 4)

  cv2.imshow("video", thresh) 

  if cv2.waitKey(1) & 0xFF == ord('q'): # 按下q键退出
    break   # 关闭视频窗口

cv2.destroyAllWindows()  # 销毁所有窗口
cap.release()      # 释放视频捕获资源

额外优化点

  • 新增视频读取失败的判断,避免视频播放完毕后img为None导致后续报错
  • 新增行索引下限判断,防止循环中h-i变为负数,触发新的索引越界错误

内容的提问来源于stack exchange,提问作者Luis Delbergue Chico

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 03:05:21