如何使用范围作为矩阵的第一个输入坐标,而不将第二个输入应用于范围?

2024-06-17 11:53:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在表示二进制图像的数组中设置单个列中一系列行的值

基本上,我正在尝试执行图像扩展,并希望根据基本图像中已等于1的像素位置,将单个列中几行的值设置为1。相关代码如下

for j in critspace_c:
    for i in critspace_r:
        if image[i][j] == 0:
            pass
        elif image[i][j] == 255:
            for k in range(1, criterion+1):
                img_dilated[range(i-k, i+k+1)][j] = 255

基本上,我希望最后一行解释为:“对于以j列中的行I为中心的2k+1行,将它们的值设置为255。”

我得到以下错误:

img_dilated[range(i-k, i+k+1)][j] = 255

IndexError: index 37 is out of bounds for axis 0 with size 3"

我明白为什么会这样;代码将j(其为37,因为相关像素在第37列中)解释为前一组索引的索引,其值小于37。但是,我希望程序将j解释为img\u扩展矩阵的列索引。有没有办法“跳过”直接跟在矩阵名称后面的[],以便将[j]应用于矩阵,而不是括号中的索引

提前谢谢大家

编辑以防将来有人遇到此问题:

我想出了解决办法。由于图像表示为数组,因此可以使用逗号分隔的坐标对其进行索引。我把这个图像当作一个列表,其实不然。代码的最后一行应该是:

img_dilated[range(i-k, i+k+1), j] = 255

希望这有帮助


Tags: 代码in图像imageimgforif二进制