Получите второй канал из трехканального изображения в виде массива Numpy - PullRequest
1 голос
/ 04 августа 2020

Я использую Python 3.7.7.

У меня есть изображение с тремя каналами в виде массива Numpy с такой формой: (200, 200, 3).

Потому что это так огромный, я попытался угадать, что я должен делать с этим примером:

import numpy as np

a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

print(a[1]) # Output [4, 5, 6]

Но я не уверен, правильно ли я делаю.

Что мне делать чтобы получить второй канал из массива изображений (форма вывода (200, 200, 1))?

1 Ответ

1 голос
/ 04 августа 2020
• 1000 Numpy имеет команду obj.flatten (), чтобы упростить эту задачу. Затем для получения среднего канала можно использовать нарезку или индексирование Numpy. В каждом обработанном пакете много изображений (строк), и каждое изображение представляет собой одну очень длинную сплющенную строку.

Пример:

b = a.flatten()  
print(b)  
# output array([1, 2, 3, 4, 5, 6, 7, 8, 9])
channel2 = b[3:6]  
print(channel2) 
# output array([4, 5, 6])

Для других случаев использования может будет другое соглашение.

Более длинный пример с использованием массива изображений 3x3 с 3 каналами. Обратите внимание, что числовые значения расположены в порядке возрастания строк, за которым следует порядок каналов.

img_a = np.arange(0, 27).reshape(3, 3, 3) 
''' output 
array([[[ 0,  1,  2],
        [ 3,  4,  5],
        [ 6,  7,  8]],

       [[ 9, 10, 11],
        [12, 13, 14],
        [15, 16, 17]],

       [[18, 19, 20],
        [21, 22, 23],
        [24, 25, 26]]])
'''  
# Flatten into one long row  
row_a = img_a.flatten()
# output array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
#       17, 18, 19, 20, 21, 22, 23, 24, 25, 26])

# Select middle channel using Numpy slicing    
channel_mid = row_a[9:18] 
# output array([ 9, 10, 11, 12, 13, 14, 15, 16, 17])

# Convert middle channel back into a matrix shape (if needed).
matrix_mid = channel_mid.reshape(3, 3)
''' output 
array([[ 9, 10, 11],
       [12, 13, 14],
       [15, 16, 17]])
'''       
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...