从两个中检测出一个球(Python)

时间:2012-03-22 17:24:06

标签: python

所以我在输入中有一个图像,我把它变成了一个数组。有两个球,我想删除一个球。 我的想法是通过一个循环,并在有红色像素的情况下逐行检测。如果在i中的这个数组中,并且i + 1中没有红色像素,则擦除整个线的其余部分。

for i in range(0, len(data)):
    h = h + 1
    #print("0"),
    if (i>1) and (((data[i - 1])[1] > 40  and (data[i - 1])[2] > 40 ) and ((data[i + 1])[1] > 40 and (data[i+1])[2])):
           print("_"),
    elif  (data[i])[1] < 40 and (data[i])[2] < 40 and (data[i])[0] > 50  :
               j = j + 1
               print "#" ,
    else :
                   print("."),
               #else : 
       # print data[i],


    if h == 64 :
       h = 0
       test = True

       print("\n") 

我的代码有什么问题,如何通过我的方法擦除球?

1 个答案:

答案 0 :(得分:0)

如果您只想删除左侧的任何内容:

data[:,:data.shape[1]/2] = 0

或右侧:

data[:,data.shape[1]/2:] = 0

如果您的问题是阵列(numpy)中有球(红色,绿色和蓝色),并且没有背景或噪音。为简单起见,如果红色= 1,绿色= 2,蓝色= 3,则为:

data[np.where(data == 1)] = 0

将移除红球。对于更复杂的检测需求,您可以在下面使用...

你可以使用scipy.ndimage中的标签,因为你的数据是一个np数组,只需说(当然,如果你的球太重叠,它们可能不会分开):

from scipy.ndimage import label
labled_data, labels = label(data)
#If you want to remove the first ball
labled_data[np.where(labled_data == 1)] = 0
#Then your second ball will be where the labled data is 2
#Else if you just temporary want to know where the second ball is:
labled_data == 2
#Will be true for those places