将(1,1,1)和(0,0,0)以外的BGR通道转换为白色(255,255,255)

时间:2019-04-13 14:11:20

标签: python image opencv

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

我编写了一个可以转换除[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]像素以外的所有图像转换为白色[255,255,255]?

1 个答案:

答案 0 :(得分:2)

Operator precedence

&的优先级高于==!=,因此您需要括号以使其工作:

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