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

2024-09-30 22:11:32 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我刚开始学习python&;openCV(大约两小时前(-;)和我想要一个程序,通过查看视频中的每一帧,在每一列计算不在treshold(int x)中的像素,并将其放入一个黑暗的数组中。但我得到indexer:list assignment index超出范围

我的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, y, 1]
            colB = frameOut[x, y, 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)

Tags: inrightforgetrange数组widthcv2
1条回答
网友
1楼 · 发布于 2024-09-30 22:11:32

您在如何创建数组方面弄错了。以下一行:

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)

相关问题 更多 >