Преобразовать каналы BGR, кроме (1,1,1) и (0,0,0), в белый (255,255,255) - PullRequest
1 голос
/ 13 апреля 2019

У меня есть вход image , из которого я должен преобразовать все каналы BGR, которые не принадлежат [0,0,0] и [1,1,1], в белый [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()

Как преобразовать все изображения вбелый [255,255,255] за исключением [0,0,0] и [1,1,1] пикселей путем изменения вышеуказанного кода?

1 Ответ

2 голосов
/ 13 апреля 2019

Приоритет оператора .

& имеет более высокий приоритет, чем == и !=, поэтому вам нужно скобки, чтобы эта работа работала:

 im[np.any((im != [0, 0, 0]) & (im != [1, 1, 1]), axis=-1)] = [255, 255, 255]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...