Я пытаюсь замаскировать изображение, где замаскированные значения соответствуют любому из нескольких значений в списке.
Рассмотрим следующие «изображения» и «значения пикселей»
import numpy
img = numpy.arange(27).reshape(3,3,3) #something to represent an image
pixels = [numpy.array([0,1,2]), numpy.array([9,10,11])] #arbitrarily selected "pixel" values
Я пытаюсь придумать некоторую процедуру, которая выведет массив 2d маски, где маскированные значения соответствуют значениям пикселей всписок pixels
Цель:
In [93]: mask
Out[93]:
array([[1, 0, 0],
[1, 0, 0],
[0, 0, 0]])
Попытка 1 из этот ответ :
mask = numpy.zeros( img.shape[:2], dtype = "uint8" )
mask[numpy.in1d(img, pixels).reshape(mask.shape)] = 1
В результате ValueError: cannot reshape array of size 27 into shape (3,3)
Iполагаем, что этот ответ предполагает 2-мерный ввод в виде img
Попытка 2:
mask = numpy.zeros(img.shape[:2])
for x,y in [(x,y) for x in range(img.shape[0]) for y in range(img.shape[1])]:
if img[x,y,:] in pixels:
mask[x,y] = 1
Это приводит к ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
, но представьте, что есть более краткий подход, чем циклическое прохождение каждого значения.