检测两个球中的一个(Python)

检测两个球中的一个(Python),python,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处,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") 
范围内的i(0,len(数据)):
h=h+1
#打印(“0”),
如果(i>1)和((数据[i-1])[1]>40和(数据[i-1])[2]>40)和((数据[i+1])[1]>40和(数据[i+1])[2]):
打印(“"”),
elif(数据[i])[1]<40和(数据[i])[2]<40和(数据[i])[0]>50:
j=j+1
打印“#”,
其他:
打印(“.”),
#其他:
#打印数据[i],
如果h==64:
h=0
测试=真
打印(“\n”)

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

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

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数组,只需简单地说(当然,如果您的球重叠过多,它们可能不会被分开):


好啊虽然你没有问任何问题,但是…也许你不能在这种情况下首先渲染红色?或者在没有它的情况下渲染一个新帧?你在做碰撞检测吗?我想我没有做碰撞检测。。但我正在做一个“红球识别”,我希望能够检测到一个球。这些是真实的/照片级的图像吗?它们是如何产生的?背景是什么?有噪声吗?即使我的数组只是由3个变量组成,红色、绿色和蓝色?我不太明白你的意思,我以为你有一个数组(数据),里面有你想要检测的球。如果你的意思是你有一个数组和像素,其中红色的球是红色的唯一地方,你想删除所有红色,那么有更简单的方法,几乎就是这样。如果数组中有两个球,一个在左边,一个在右边,我想删除右边的一个。如果它们有不同的颜色,你仍然可以使用该代码,但是如果你只想删除左边的所有东西…我会更新。。。
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