python - Python和openCV数组IndexError:列表分配索引超出范围
问题描述
有谁知道为什么我在尝试将整数 x 放入暗数组时得到 IndexError: list assignment index out of range ?
我刚开始学习 python 和 openCV(大约两个小时前(-;),我想要一个程序来查看视频中的每一帧,在每一列计算不在阈值(int x)中的像素并将其放入数组暗。但我得到 IndexError: list assignment index out of range。
我的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)
解决方案
您对如何创建数组有误。以下行:
dark = [width - right - left]
创建一个list
带有一个元素的 Python,这个元素是width - right - left
. 但是,您可能想要做的是创建一个 size 为零的数组width - right - left
,您可以通过执行以下操作来创建它:
import numpy as np
dark = np.zeros(width - right - left)
或者这个,如果你不想使用numpy
:
dark = [0] * (width - right - left)
推荐阅读
- android - Kotlin Firebase 不更新子级
- java - 如何调试破坏者的性能?
- amazon-web-services - 为什么我们的 presto 查询运行时间会出现峰值?
- php - loadHTMLFile() 会话完好无损
- java - 保存随机变异爬山算法的最佳解决方案 - Java
- microsoft-edge - MS Edge:SCRIPT5022:无法链接顶点和片段着色器
- flutter - 使用导航键而不是传递上下文来颤振 showDialog
- mysql - MySQL.connector.errors.ProgrammingError: 1064 (42000): 你的 SQL 语法有错误;
- pytorch - 了解 PyTorch 训练批次
- python - 将 dask 数据帧转换为 avro