如何在不获取“TypeError:字符串索引必须是整数”的情况下对图像进行 numpy 切片
Posted
技术标签:
【中文标题】如何在不获取“TypeError:字符串索引必须是整数”的情况下对图像进行 numpy 切片【英文标题】:How to numpy-slicing an image without getting "TypeError: string indices must be integers" 【发布时间】:2018-12-24 10:35:08 【问题描述】:我收到了错误:
"TypeError: 字符串索引必须是整数"
当我尝试裁剪图像时
我正在尝试编写一个裁剪矩形图像的函数,以制作方形图像并居中。
def squared_and_resized(img,resized_dim):
image = cv2.imread(img)
img_height,img_width = image.shape[:2]
if (img_width > img_height):
start_row = 0
end_row = img_height
start_col = math.floor((img_width - img_height) /2)
end_col = math.floor((img_width + img_height) /2)
else:
start_col = 0
end_col = img_width
start_row = math.floor((img_height-img_width)/2)
end_row = start_row + img_width
squared_img = img[start_row:end_row , start_col:end_col]
resized_img = cv2.resize(squared_img,(resized_dim, resized_dim))
return resized_img
【问题讨论】:
提供完整的错误信息。乍一看,您似乎正在尝试切片字符串而不是图像。重新检查您的变量名并确保您没有两次使用相同的变量名。 在您的代码中:image = cv2.imread(img)
.
【参考方案1】:
math.floor 返回一个浮点类型变量。你可以使用int(math.floor((img_height-img_width)/2))
【讨论】:
【参考方案2】:错误在以下行中:squared_img = img[start_row:end_row , start_col:end_col]
。经过代码检查,img
似乎是 str
类型,它被传递给此方法,然后用于图像切片。您可能需要使用squared_img = image[start_row:end_row , start_col:end_col]
为了在未来缓解此问题,请使用有意义的名称。在这种情况下,方法参数可以命名为image_path
。
【讨论】:
以上是关于如何在不获取“TypeError:字符串索引必须是整数”的情况下对图像进行 numpy 切片的主要内容,如果未能解决你的问题,请参考以下文章
在 Python 中读取 JSON 字符串:接收错误“TypeError:字符串索引必须是整数”
Azure KeyVault:get_secret() - Python TypeError:字符串索引必须是整数
读取 JSON 字符串 | TypeError:字符串索引必须是整数