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

标签 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()

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

最佳答案

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

引用宽度的y也是如此(因此,范围从0到1920)。

只需交换帧 slice ,您就可以开始:
print(frame[y,x,2], frame[y,x,0], frame[y,x,1], frame_read)

关于python - IndexError:索引1080超出了尺寸为1080的轴0的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57878978/

相关文章:

python - 如何创建 pip 可安装项目?

python - 如何写入 Python 子进程的标准输入?

python - 我将如何使用 Python Tornado 通过 HTTP 实现 "tail"?

android - 两幅图像之间的特征匹配匹配率

opencv - 如何使用openCV确定平移和旋转矩阵

opencv - 物体面积和最大物体长度

python - 如何在我的 Fedora 发行版上安装 data.table

python - 关于 Pandas 多索引 HDFStore 的磁盘索引

c++ - 带有用 C 编写的库的智能指针

c++ - 根据现有标签而不是二值图像使用 OpenCV 查找连接组件