numpy:根据多个条件将值设置为零

时间:2015-02-02 14:01:33

标签: python arrays numpy

我有一个RGB图像,我正在尝试使用以下内容执行简单的阈值处理:

from skimage import filter
def threshold(image):
    r = image[:, :, 0]
    g = image[:, :, 1]
    b = image[:, :, 2]

    rt = filter.threshold_otsu(r)
    gt = filter.threshold_otsu(g)
    bt = filter.threshold_otsu(b)

我想做的是现在制作二进制掩码,其中原始图像中小于这些阈值的RGB值应设置为0.

mask = np.ones(r.shape)

我无法弄清楚怎么做是如何将掩码索引(x,y)设置为零

image[x, y, 0] < rt and image[x, y, 1] < gt and image [x, y, 2] < bt

不知何故,我需要从原始图像中获取符合此条件的(x,y)像素索引,但我不知道该怎么做。

2 个答案:

答案 0 :(得分:6)

NumPy &执行bit-wise and。应用于数组时,bit-wise and以元素方式应用。自比较以来,例如, r < rt,返回布尔数组,此处bit-wise and的结果与logical and相同。由于NumPy &的{​​{3}}比<长,所以需要使用括号。

mask = (r < rt) & (g < gt) & (b < bt)
image[mask] = 0

答案 1 :(得分:2)

小心 - OpenCV使用“BGR”,而不是RGB。 所以使用

r = image[:, :, 0]

产生BLUE通道, NOT RED通道!