在Python中将黑色或白色的rgb数组转换为1或0数组

时间:2015-07-22 17:09:33

标签: python arrays image image-processing physics

我是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)

1 个答案:

答案 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