我有一个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)像素索引,但我不知道该怎么做。
答案 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通道!