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')
由于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')