如何在不获取“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:字符串索引必须是整数

为啥我看到“TypeError:字符串索引必须是整数”?

读取 JSON 字符串 | TypeError:字符串索引必须是整数

Python:TypeError:字符串索引必须是整数[关闭]

弹性搜索 | TypeError:字符串索引必须是整数