所以我在输入中有一个图像,我把它变成了一个数组。有两个球,我想删除一个球。 我的想法是通过一个循环,并在有红色像素的情况下逐行检测。如果在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")
我的代码有什么问题,如何通过我的方法擦除球?
答案 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