#python #arrays #opencv #opencv-python #indexoutofrangeexception
#python #массивы #opencv #opencv-python #исключение indexoutofrangeexception
Вопрос:
Кто-нибудь знает, почему я получаю IndexError: индекс назначения списка вне диапазона, когда я пытаюсь поместить целое число x в темный массив?
Я только начал изучать 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, 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)
Комментарии:
1. Можете ли вы указать строку, в которой вы получаете эту ошибку?
2. строка 35 (темная [y — 1 — слева] = x)
Ответ №1:
Вы ошибаетесь в том, как создать массив. Следующая строка:
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)