代码之家  ›  专栏  ›  技术社区  ›  rnso

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

  •  1
  • rnso  · 技术社区  · 7 年前

    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 ,但我无法将其放入此代码中。如何解决这个问题?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Divakar    7 年前

    使用 np.where 使用与阈值进行比较的掩码-

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

    img[...,[0]] 根据广播分配的需要保留DIM的数量 np.在哪里 img[...,0,None]<150 面具会一直变暗。

        2
  •  2
  •   Sivaram Rasathurai    5 年前

    out_val = 0
    gray = cv2.imread("colour.png",0)
    
    gray[gray<value] = out_val