python - 我得到一个索引类型不合适的 IndexError,但我已经使用 int() 函数对索引进行了类型转换。有人可以帮忙解释一下吗?
问题描述
以下程序用于使用一阶插值进行缩放。我正在读取图像,删除行和列,然后尝试通过平均像素值来重新缩放图像。
与错误对应的行如下所示。该代码还包含一个鼠标处理程序,该处理程序确定单击后将修改的区域。
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()
解决方案
推荐阅读
- monaco-editor - Monaco Editor:使用 API 设置字体大小?
- c# - 带有 TCP NetworkStream 的 TPL 数据流
- laravel - “在 null 上调用成员函数 move()”
- r - 有没有办法在 ggplot 中分离一个条形图,它需要前 n 行,然后制作一个条形图,然后是下 n 行,直到 nrow(df) 完成?
- heroku - 如何使用 ng cli 在 Heroku 上部署 Angular 应用程序?
- python - FFT减法 - OpenCV
- ubuntu - 为什么这个 SDL2 图形代码在 Kubuntu 18.04 中不能按预期工作?
- java - 直接缓冲存储器
- ios - 如何隐藏 UIContextMenuInteraction/UITargetedPreview 黑色背景?
- javascript - 如何在 React 中每分钟自动获取数据?