Как разделить данные изображения на координаты x, y?(Python) - PullRequest
0 голосов
/ 12 октября 2018

У меня есть данные изображения, как я могу разделить их на x, y и значение?

данные изображения

[[38  0  0 ...  0  0  0]
 [46  3  0 ...  0  0  0]
 [46  3  0 ...  0  0  0]
 ...
 [74  0  0 ...  0  0  0]
 [74  0  0 ...  0  0  0]
 [74  0  0 ...  0  0  0]]

и их должно быть?

x = 0, y = 0, value = 38
x = 0, y = 1, value = 46
...

Как я могу разделить его на:

x = []
y = []
value = []

только метод петли for работает?

Спасибо за любую помощь

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

IIUC, я думаю, вы можете использовать np.indices.Возьмите ваш пример:

>>> img
array([[38,  0,  0,  0,  0,  0],
       [46,  3,  0,  0,  0,  0],
       [46,  3,  0,  0,  0,  0],
       [74,  0,  0,  0,  0,  0],
       [74,  0,  0,  0,  0,  0],
       [74,  0,  0,  0,  0,  0]])

value = img.flatten()
y,x = np.indices(img.shape).reshape(-1,len(value))

>>> x
array([0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3,
       4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5])
>>> y
array([0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3,
       3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5])
>>> value
array([38,  0,  0,  0,  0,  0, 46,  3,  0,  0,  0,  0, 46,  3,  0,  0,  0,
        0, 74,  0,  0,  0,  0,  0, 74,  0,  0,  0,  0,  0, 74,  0,  0,  0,
        0,  0])

Итак, где x равно 0, а y равно 0, вы получите value 38, где x равно 0 и y равно 1, вы получите value 46 и т. Д.

Редактировать : В своем комментарии вы сказали, что хотите отфильтровать нули.Вы можете сделать это с np.where и np.nonzero:

y,x = np.where(img)

value = img[np.nonzero(img)]

>>> y
array([0, 1, 1, 2, 2, 3, 4, 5])
>>> x
array([0, 0, 1, 0, 1, 0, 0, 0])
>>> value
array([38, 46,  3, 46,  3, 74, 74, 74])
0 голосов
/ 12 октября 2018

если ваше изображение цветное, оно часто в формате RGB (3 канала), если оно в оттенках серого, оно будет иметь 1 канал.Таким образом, форма массива будет (img_height, img_width, number_of_channels)

. Понимая форму, вы можете правильно использовать imread из PIL или imread из matplotlib, чтобы загрузить изображение, а затем повернутьих для массива, используя myarray = numpy.array(your_loaded_img).Поскольку это пустой массив, вы можете вызывать значения ячеек по myarray[x,y]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...