【问题标题】:Different shape when indexing numpy array索引numpy数组时的不同形状
【发布时间】:2020-04-23 11:09:35
【问题描述】:

我正在尝试将“PNG”文件读取为 numpy 数组。我使用 cv2 库 cv2.imread('image') 来完成它,它返回一个 numpy 数组。当我打印出它的形状时,我得到了我真正想要的 (6784, 5216, 3)。但是当我尝试使用 array[1] 或 array[0] 在数组中迭代时,在这两种情况下我都会得到 5216 个输出。因此,我得到了 outOfBoundIndex 错误。任何方式我也可以看到第 5216 个索引和 6784 之间的其他像素?

添加代码:

path = "/home/y0b8k/Projects/y3-ogam/gt_20/train_2.png"
ar = cv2.imread(path_copy, cv2.IMREAD_UNCHANGED)

我之前的循环如下所示。它实际上读取了这些值,并尝试按照我的意愿为新的输出图像着色。

x, y = 0, 0

while y < mask.size[1]-1:  

    while x < mask.size[0]:
        value = pix[x,y]
        print(x)
        if value[0] == 3:
            col = [64,173,38,255]
            ar[x,y] = col
        if value[0] == 5:
            #print(ar[x,y])
            col = [203,0,0,255]
            ar[x,y] = col
        if value[0] == 7:
            col = [30,50,250,255]
            ar[x,y] = col
        if value[0] == 4:
            col = [100,100,100,255]
            ar[x,y] = col
        else:
            col = [255,255,255,255]
            ar[x,y] = col
        x += 1
    y+=1
    x= 0

cv2.imwrite("çıktı.png",ar)

【问题讨论】:

  • “我还能看到第 5216 个索引和 6784 之间的其他像素吗?”不,它们不存在。您已经表明图像只有 5216 列...

标签: python python-3.x numpy opencv


【解决方案1】:
for row in png:
    for pixel in row:
         # do stuff

应该遍历所有像素。

for pixel in array[0]:
    # do stuff

会运行 5216 次(第一行像素),但我不知道这是否是你正在做的,因为你没有发布代码

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-04
    • 1970-01-01
    • 1970-01-01
    • 2015-04-08
    • 1970-01-01
    • 2019-04-22
    • 2016-11-20
    • 1970-01-01
    相关资源
    最近更新 更多