如何在多个条件下使用循环

问题描述 投票:0回答:1

labels[(x, y)]返回coordinate(x)coordinate(y)的值。 labels[(x, y)]实际上在图像中表示不同的形状,并且在检测之后每个形状被保存为不同的图像。对于每个形状或组件,我使用多个if条件,例如if labels[(x, y)] == 0: # save it as an image。然而,对于每一个新的形状,我必须创建一个新的if,到目前为止,我已经使用了7 if conditions。如何只用一个if条件解决这个问题。

for (x, y) in labels:
    component = uf.find(labels[(x, y)])
    labels[(x, y)] = component
    print (format(x) +","+ format(y)+ " " +format(labels[(x, y)]))

    if labels[(x, y)]==0:
        Zero[y][x]=int(255)
        count=count+1
        if count<=43:
            continue
        elif count>43:
            Zeroth = Image.fromarray(Zero)
            Zeroth.save(os.path.join(dirs, 'Zero.png'), 'png')

    if labels[(x, y)]==1:
        One[y][x]=int(255)
        count1=count1+1
        if count1<=43:
            continue
        elif count1>43:
            First = Image.fromarray(One)
            First.save(os.path.join(dirs, 'First.png'),'png')
python numpy for-loop if-statement python-imaging-library
1个回答
1
投票

由于if块遵循相同的逻辑,除了源数组(Zero,One,...)和目标文件名(Zero.png,First.png等)。您可以将这些信息记录在字符中,其中键是标签。例如:

dict = {
        0: {"source": Zero, "file": "Zero.png"},
        1: {"source": One, "file": "First.png"},    # and so on. 
       }

然后,在循环中,您只需使用dict.get查找标签:

data = dict.get(labels[(x, y)])
if data:     # data will be None (falsy) if label isn't in the dictionary   
    data["source"][y][x] = int(255)
    count += 1
    if count <= 43:
        continue
    elif count > 43:
        image = Image.fromarray(data["source"])
        image.save(os.path.join(dirs, data["file"]), 'png')
© www.soinside.com 2019 - 2024. All rights reserved.