2016-11-16 17 views
2

Я загрузил изображение в виде массива numpy с использованием подушки, а размеры результирующего массива numpy (184, 184, 4), то есть это изображение размером 184x184 пикселей с каждым пикселем, имеющим Размеры RGBA.Преобразование массива RGBA numpy в двоичный массив 2d numpy

Для всех практических целей мое приложение просто должно знать, является ли пиксель черным или нет, и, следовательно, мне просто нужен массив 184x184 np с 0, 1.

Я новичок в numpy и особенно обработке изображений, хотел узнать, есть ли более быстрый способ сделать это.

Я пробовал наивную реализацию проверки каждого пикселя в цикле, который кажется слишком дорогостоящим.

ответ

2

Если я правильно понял, у вас есть массив с формой (184,184,4), и вы хотите получить булевский массив с формой (184,184) в зависимости от того, равна ли конечная размерность [0,0,0,0 ]

image = np.random.randint(0, 255, size=(184, 184, 4)) #Generate random image 
isBlack = np.int64(np.all(image[:, :, :3] == 0, axis=2)) 

Done!

Но как это работает? Кажется, это волшебство! Ненусы - это волшебство. Вот почему нам это нравится. В этом случае:

  • изображение == 0 превращается в (184,184,4) Логический массив в зависимости от того, каждый номер равен 0
  • в этом случае мы используем изображение [:,:,: 3 ], чтобы исключить 4-е число из уравнения
  • np.all спрашивает, равны ли все элементы 0.
  • параметр оси изменяет ось, на которую он смотрит, помня, что python начинает отсчет с 0, поэтому третья ось - номер 2.
+0

что делать, если я хочу 0 или 1 вместо True или ложный. –

+0

isBlack = np.int16 ((np.all (image == 0, axis = 2))) –

+0

Также я хочу, чтобы конечный размер был равен [0,0,0, <Мне не важно это место >] –