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

将(1,1,1)和(0,0,0)之外的BGR信道转换为白色(255255255)

  •  1
  • Ajinkya  · 技术社区  · 5 年前

    我有一个输入 image 从中我必须将不属于[0,0,0]和[1,1,1]的所有BGR信道转换为白色[255255255]。

    我编写了一个代码,可以转换除[0,0,0]之外的所有频道 变白。

    import numpy as np
    import cv2
    
    for i in range (1,5):
        im = cv2.imread(str(i)+'.png')
        im[np.any(im != [0, 0, 0], axis=-1)] = [255,255,255]
        cv2.imwrite('a'+str(i)+'.png', im)
    

    我的目标是将除[0,0,0]和[1,1,1]之外的所有频道转换为白色。为此,我对代码进行了以下更改。

    import numpy as np
    import cv2
    
    for i in range (1,5):
        im = cv2.imread(str(i)+'.png')
        im[np.any(im != [0, 0, 0] & im != [1,1,1], axis=-1)] = [255,255,255]
        cv2.imwrite('a'+str(i)+'.png', im)
    

    我得到这个错误:

    Traceback (most recent call last):
      File "convert.py", line 6, in <module>
        im[np.any(im != [0, 0, 0] & im != [1,1,1], axis=-1)] = [255,255,255]
    ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
    

    如何通过更改上述代码将除[0,0,0]和[1,1,1]像素外的所有图像转换为白色[255255255]像素?

    1 回复  |  直到 5 年前
        1
  •  2
  •   gmds    5 年前

    Operator precedence .

    & 优先级高于 == != ,因此您需要括号来完成此操作:

     im[np.any((im != [0, 0, 0]) & (im != [1, 1, 1]), axis=-1)] = [255, 255, 255]