IndexError:索引1080超出了尺寸为1080的轴0的范围

时间:2019-09-10 22:35:19

标签: python opencv

我正在阅读python上的视频帧,并且试图找到每个帧索引的RGB。我需要检测LED(将阈值设置为开/关-红色/黑色),但索引遇到问题。

我需要访问图像左下角的RGB值。

# Check if camera opened successfully
if (video.isOpened()== False): 
  print("Error opening video stream or file")

  # Read until video is completed
while(video.isOpened()):
  # Capture frame-by-frame
  ret, frame = video.read()
  frame_read += 1

  if ret == True:

    # Display the resulting frame
    cv2.imshow('Frame',frame)

    height, width, channels = frame.shape

    #Accessing RGB pixel values    
    for x in range(round(width/2), width) :
     for y in range(0, round(height/2)) :
          print(frame[x,y,2], frame[x,y,0], frame[x,y,1], frame_read) #R,B,G Channel Value


    # Press Q on keyboard to exit
    if cv2.waitKey(25) & 0xFF == ord('q'):
      break

  # Break the loop
  else: 
    break

    video.release()
    cv2.destroyAllWindows()

我的错误是在行上打印的(frame [x,y,2],frame [x,y,0],frame [x,y,1],frame_read)     IndexError:索引1080超出了尺寸为1080的轴0的范围

1 个答案:

答案 0 :(得分:2)

当您将框架切片为frame[x, y, 2]时,您忘记了frame的第一片始终是高度(就像您在height, width, channels = frame.shape中所做的那样),因此您在帧切片的范围不能从0width(在您的情况下为1920),因为第一个切片(您的x)的范围是0height (1080)。

引用宽度的y也一样(因此您的范围为0到1920)。

只需交换帧切片,您就可以开始:

print(frame[y,x,2], frame[y,x,0], frame[y,x,1], frame_read)