Python和openCV数组IndexError:列表分配索引超出范围

问题描述

有人知道为什么我尝试将整数x放入暗数组时为什么出现IndexError:列表分配索引超出范围吗?

我刚刚开始学习python&openCV(大约两个小时前(-;),并且我想要一个程序可以浏览视频中的每一帧,在每一列中计算不在阈值(int x)中的像素,然后放入它在黑暗的数组中。但是我得到IndexError:列表分配索引超出范围。

我的python代码

import cv2

vid = cv2.VideoCapture("136.mp4")

width = int(vid.get(3) / 2)
height = int(vid.get(4) / 2)

#frameCount = int(vid.get(1))

left = 300
right = 400
top = 210
bottom = 140

for i in range(0,1599): #frame count
    vid.set(1,i)
    x,frameIn = vid.read()
    frameOut = cv2.resize(frameIn,(width,height))

    dark = [width - right - left]

    for y in range(left,width - right):
        x = 0
        for x in range(top,height - bottom):
            colR = frameOut[x,y,2]
            colG = frameOut[x,1]
            colB = frameOut[x,0]

            if colR < 50 and colG > 60 and colB > 80:
                frameOut[x,y] = [255,255,255]
            else:
                x += 1


        dark[y - 1 - left] = x

    #cv2.imshow("video",frameOut)
    print(max(dark))
    cv2.waitKey(0)

解决方法

您对如何创建数组有误。以下行:

dark = [width - right - left]

用一个元素创建一个Python list,这个元素是width - right - left的值。但是,您可能想做的是创建一个大小为width - right - left的零数组,您可以通过执行以下操作来创建它:

import numpy as np

dark = np.zeros(width - right - left)

或者这,如果您不想使用numpy

dark = [0] * (width - right - left)