【问题标题】:Replace image pixel color on condition in Python在Python中根据条件替换图像像素颜色
【发布时间】:2019-04-13 22:51:35
【问题描述】:

我有一个 RGBA 图像,我必须在其中查找是否有任何像素的红色值

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 之类的某些函数对其进行优化,但我无法将其放入此代码中。怎么解决?

【问题讨论】:

    标签: python arrays image numpy replace


    【解决方案1】:

    对于一个通道图像,我们可以这样做

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 在数组中使用...[0]0,None 很有趣。是否有一个很好的链接可以了解更多关于这些的信息?
      • @rnso 这应该会有所帮助 - docs.scipy.org/doc/numpy-1.15.1/reference/…
      • np.where 参数中,它应该是imgarr 而不是img(在两个地方)。
      • @rnso 是的,我假设 img 是一个数组。固定。
      猜你喜欢
      • 1970-01-01
      • 2021-05-04
      • 1970-01-01
      • 2012-05-27
      • 1970-01-01
      • 2012-09-30
      • 2018-05-11
      • 1970-01-01
      • 2010-12-05
      相关资源
      最近更新 更多