Я получаю IndexError, что тип индекса не подходит, но я произвел тип-индекс с помощью функции int (). Кто-нибудь может помочь и объяснить? - PullRequest
0 голосов
/ 21 февраля 2020

Данная программа предназначена для масштабирования с использованием интерполяции первого порядка. Я читаю изображение, удаляю строки и столбцы, а затем пытаюсь изменить его масштаб путем усреднения значений пикселей.

Строка, соответствующая ошибке, показана ниже. Код также содержит обработчик мыши, который определяет область, которая будет изменена после щелчка.

import cv2
import numpy as np
import sys
#Global Declaration
img = cv2.imread("lenna.png")
maskSize = 100
gap = 4
#Callback function
def clickAndScale(event, y, x, flags, param):
    if event==cv2.EVENT_LBUTTONDOWN:
        output = img.copy()
        for i in range (x, x+maskSize): #maskSize is for the area to undergo change after mouse click 
            for j in range (y, y+maskSize):
                output[i][j] = temp[i][j]
        cv2.imshow("Interpolation", output)


#Body of the code
height, width = img.shape[0:2]
scaleDown = np.zeros((height//gap, width//gap, 3), dtype=np.uint8)
k, l = 0, 0
for i in range(0, width, gap):
        for j in range(0, height, gap):
            scaleDown[k][l] = img[i][j]
            l += 1
        k += 1
        l = 0     
temp = np.zeros((height, width, 3), dtype=np.uint8)
k, l = 0, 0

for i in range (0, width, 4):
    for j in range (0, height, 4):
        k, l, m = i, j, gap+j
        for t in range (0 ,2):
            for n in range (0,2):
                var1 = int((l+m)//2)
                var2 = int((m+gap)//2)
                temp[k][var1] = int((temp[k][l]+temp[k][l+m])//2) #This is the line which causes the error
                temp[k][var2] = int((temp[k][m]+temp[k][gap])//2)
                m /= 2
            k, l, m  = i+gap, j, gap+j 
        k, l, m = i, j, gap+1    
        for l in range (j , j+gap+1):
            for n in range (0, 2):
                var1 = int((k+m)//2)
                var2 = int((k+gap)//2)

                temp[var1][l] = (temp[k][l]+temp[k+m][l])//2
                temp[var2][l] = (temp[k][l]+temp[gap][l])//2
                m /= 2
            m = gap+j

cv2.imshow("Image",img)
cv2.setMouseCallback("Image", clickAndScale) #Mouse Callback function
cv2.waitKey(0) 
cv2.destroyAllWindows()
...