我是python的新手,我正在使用一个完全黑白的粒子探测器中包含'命中'的图像。
为了计算命中数(后来将命中与不同的粒子分开),我需要将相邻的白色像素分组。
我的代码目前确保图像只有黑色或白色,然后尝试使用scipy标签功能对白色像素进行分组(这应该适用于任何无0值的组合,并且我使所有黑色像素都为0并且全部为白色像素保持1.然而它返回0标签,我不确定为什么。我认为这可能与事实不仅仅是1和0,但仍然是我正在使用的列表元组。
有没有办法根据像素是黑色还是白色来创建一个简单的1或0的数组?
def analyseImage(self, imPath):
img = Image.open(imPath)
grey = img.convert('L')
bw = np.asarray(grey).copy()
#Switches black and white for label to be effective
bw[bw < 128] = 255 # White
bw[bw >= 128] = 0 # Black
lbl, nlbls = label(bw)
labels = range(1, nlbls + 1)
coords = [np.column_stack(np.where(lbl == k)) for k in labels]
imfile = Image.fromarray(bw)
答案 0 :(得分:1)
在行bw[bw < 128] = 255 # White
之后,所有元素&lt; 128已经被设置为255,这意味着现在每个元素都是> = 128(因为255是> 128)。然后,以下行将每个元素替换为0,因为现在所有元素现在都是&gt; = 128。
尝试改为:
def analyseImage(self, imPath):
img = Image.open(imPath)
grey = img.convert('L')
#Switches black (0) and white (255) for label to be effective
bw = np.asarray([255 if x < 128 else 0 for x in grey])
lbl, nlbls = label(bw)
labels = range(1, nlbls + 1)
coords = [np.column_stack(np.where(lbl == k)) for k in labels]
imfile = Image.fromarray(bw)
或者,您可以创建bw
的副本,并在与128的比较中使用该副本:
bw2 = bw.copy()
bw[bw2 < 128] = 255
bw[bw2 >= 128] = 0