簡體   English   中英

Python 類型錯誤:列表索引必須是整數或切片,而不是元組

[英]Python TypeError: list indices must be integers or slices, not tuple

我正在嘗試使用卷積從圖像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

任何解決此問題的幫助表示贊賞。

您的matrix不是numpy 數組,而是 Python 列表,因此無法執行matrix[row, col]

因此,您應該將其轉換為 numpy 數組:

matrix = np.array([[-1, -2, -1], [0, 0, 0], [1, 2, 1]])
val = val + img[x+j, y+i]*matrix[row, col]

用逗號分隔的兩個值通常被解釋為一個元組。 試試這個

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM