【问题标题】:Python TypeError: list indices must be integers or slices, not tuplePython TypeError:列表索引必须是整数或切片,而不是元组
【发布时间】:2020-04-09 05:12:59
【问题描述】:

我正在尝试使用卷积从图像img 中提取特征。

img_copy = np.copy(img)
x = img_copy.shape[0]
y = img_copy.shape[1]

matrix = [[-1, -2, -1], [0, 0, 0], [1, 2, 1]] # convolution matrix
weight = 1

def conv(x, y):
    val = 0.0
    for row,i in enumerate([-1, 0, 1]):
        for col,j in enumerate([-1, 0, 1]):
            val = val + img[x+j, y+i]*matrix[row, col]
    val = val*weight

    return val

for i in range(1, x-1):
    for j in range(1, y-1):
        pixel = conv(i, j)
        if(pixel<0):
            pixel = 0
        if(pixel>255):
            pixel = 255

执行此代码块会引发以下错误:

TypeError                                 Traceback (most recent call last)
<ipython-input-66-84eb09b3a0b7> in <module>
      1 for i in range(1, x-1):
      2     for j in range(1, y-1):
----> 3         pixel = conv(i, j)
      4         if(pixel<0):
      5             pixel = 0

<ipython-input-65-88737f90ffac> in conv(x, y)
      6     for row,i in enumerate([-1, 0, 1]):
      7         for col,j in enumerate([-1, 0, 1]):
----> 8             val = val + img[x+j, y+i]*matrix[row, col]
      9     val = val*weight
     10 

TypeError: list indices must be integers or slices, not tuple

感谢任何解决此问题的帮助。

【问题讨论】:

  • 如果imgmatrix 是一个列表,那么img[x+j, y+i] 是不允许的,因为一个列表只能有一个索引。
  • matrix 是一个列表,它只支持整数索引。你的意思是把matrix 变成numpy.array
  • matrix 从 list 更改为 np.array 可以解决问题。

标签: python list numpy convolution


【解决方案1】:

您的matrix不是一个numpy数组,而是一个Python列表,因此matrix[row, col]不能被执行。

因此,您应该将其转换为 numpy 数组:

matrix = <b>np.array(</b>[[-1, -2, -1], [0, 0, 0], [1, 2, 1]]<b>)</b>

【讨论】:

    【解决方案2】:
    val = val + img[x+j, y+i]*matrix[row, col]
    

    用逗号分隔的两个值通常被解释为一个元组。试试这个

    val = val + img[x+j][y+i]*matrix[row][col]
    

    【讨论】:

      猜你喜欢
      • 2017-10-02
      • 2019-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-14
      • 2020-11-21
      • 2017-10-08
      相关资源
      最近更新 更多