我试图将项目添加到数组中,并以它们的名称命名。这是我的代码:
def create_filters(_shapes):
"""create masked filters to use on the image."""
row, col = _shapes
row, col = int(row/2), int(col/2)
urow, drow = row+10, row-10
ucol, dcol = col+10, col-10
masks = []
mask1 = np.ones(_shapes, np.uint16)
mask1[:,dcol:ucol] = 0
# masks.append(mask1)
mask2 = np.ones(_shapes, np.uint16)
mask2[drow:urow,:] = 0
# masks.append(mask2)
mask3 = cv.bitwise_not(mask1)
# masks.append(mask3)
mask4 = cv.bitwise_not(mask2)
# masks.append(mask4)
mask5 = np.zeros(_shapes, np.uint16)
mask5[drow:urow,dcol:ucol] = 255
# masks.append(mask5)
mask6 = cv.bitwise_not(mask5)
# masks.append(mask6)
mask7 = np.copy(mask1)
mask7[drow:urow,:] = 0
# masks.append(mask7)
mask8 = cv.bitwise_not(mask7)
# masks.append(mask8)
for i in range(1,9):
m = globals()[f'mask{i}']
masks.append(m)
return masks所以基本上我想把所有的面具1-8附加到面具上。现在,由于mask1 1-8是局部变量,所以我不能使用全局()。有更好的方法吗?我知道我可以像这样初始化数组:
masks=[mask1, mask2,...]但我特别要求在for循环中使用字符串作为变量名。
发布于 2021-12-08 08:58:27
有几种方法可以解决这个问题,但是要解决你的具体问题:
根据我的评论,您可以简单地使用locals()代替globals()。
发布于 2021-12-08 09:50:28
另一种选择是使用eval i.e:
for i in range(1,9):
m = eval(f"mask{i}")
masks.append(m)eval函数使用全局和本地名称空间分析和计算任何python表达式。有关eval的更多信息,请参见python文档。
https://stackoverflow.com/questions/70272148
复制相似问题