基本Python:将字符串作为输入传递给函数

2024-09-28 23:38:58 发布

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

我刚从python开始。我有4个变量F_1,F_2,F_3和F_4。每个都包含一个矩阵。我想计算它们中的非零值。所以我写了一个循环。你知道吗

f_1 = thresh1[1:mr, 1:mc]
f_2 = thresh1[1:mr, (mc+1):width]
f_3  = thresh1[(mr+1):height, 1:mc]
f_4 = thresh1[(mr+1):height, (mc+1):width]

b_1 = thresh2[1:mr, 1:mc]
b_2 = thresh2[1:mr, (mc+1):width]
b_3  = thresh2[(mr+1):height, 1:mc]
b_4 = thresh2[(mr+1):height, (mc+1):width]

for i in range(1, 5):
    n1 = "f_"
    n2 = "b_"
    num = str(i)
    n1 += num
    n2 += num

    r = cv2.countNonZero((n1)/cv2.countNonZero(n2))
    print r

我想把串接的字符串n1n2作为输入传递给方程cv2.countNonZero((n1)/cv2.countNonZero(n2))。你知道吗

这里F1是二值图像(F为前景),B1也是二值图像(B为背景)。我试图计算前景和背景中非零像素的比率。你知道吗

应计算F1/B1的r,并在下一次迭代F2/B2中。。。以此类推


Tags: 图像mcwidthcv2numf1mrheight
2条回答
f_1_nz = f_1[f_1 != 0].size
# etc.

r_1 = f_1_nz / b_1_nz
# etc.

理想情况下,您可以将f_1等放入一个列表中并对其进行迭代,而不是为每个列表定义新的名称,请参见@apnorton给出的答案。你知道吗

所以,最后:

for ff, bb in zip(f,b):
    f_nz = ff[ff != 0].size
    b_nz = bb[bb != 0].size
    print f_nz/b_nz

您有一个问题,您试图使用字符串来引用变量名。这相当困难;最好使用列表来包含图像。也就是说,不要试图引用f_1f_2等,而是创建一个名为f的列表,其中包含每个图像。你知道吗

例如,不要使用顶部的代码,而是使用:

f = [
  thresh1[1:mr, 1:mc],
  thresh1[1:mr, (mc+1):width],
  thresh1[(mr+1):height, 1:mc],
  thresh1[(mr+1):height, (mc+1):width]
]

b = [
  thresh2[1:mr, 1:mc],
  thresh2[1:mr, (mc+1):width],
  thresh2[(mr+1):height, 1:mc],
  thresh2[(mr+1):height, (mc+1):width]
]

现在您可以使用代码f[1]引用之前调用的f_1。你知道吗

现在,在循环中,可以使用:

for i in range(1, 5):
    r = cv2.countNonZero(f[i])/cv2.countNonZero(b[i])
    print r

我建议您研究如何在Python中使用列表,因为这是一种基本的数据结构。另外,"f_1"(字符串)和f_1(变量名为f_1)之间也有区别。你不能(轻易)介于两者之间。你知道吗

相关问题 更多 >