在Python中根据条件替换图像像素颜色

时间:2018-11-10 17:17:35

标签: python arrays image numpy replace

我有一个RGBA图像,必须查找是否有任何像素的红色值<150,并将这些像素替换为黑色。我为此使用以下代码:

import numpy as np
imgarr = np.array(img)
for x in range(imgarr.shape[0]):
    for y in range(imgarr.shape[1]):
        if imgarr[x, y][0] < 150:    # red value < 150
            imgarr[x, y] = (0,0,0,255)

但是,这是一个缓慢的循环,我确信可以使用诸如numpy.where之类的某些函数对其进行优化,但是我无法在此代码中使用它。该如何解决?

2 个答案:

答案 0 :(得分:1)

对于一个通道图像,我们可以执行以下操作

out_val = 0
gray = cv2.imread("colour.png",0)

gray[gray<value] = out_val

答案 1 :(得分:0)

np.where与比较阈值一起使用-

img = np.asarray(img)
imgarr = np.where(img[...,[0]]<150,(0,0,0,255),img)

我们正在使用img[...,[0]]来保持np.where广播分配所需的暗淡数量。因此,另一种方法是使用img[...,0,None]<150获取保持暗淡的蒙版。