Вот мой код:
img = imread("lena.jpg")
for channel in range(3):
res = filter(img[:,:,channel], filter)
# todo: stack to 3d here
Как видите, я применяю фильтр для каждого канала на картинке. Как мне сложить их обратно в 3D-массив? (= исходная форма изображения)
Спасибо
Вы можете использовать np.dstack:
import numpy as np
image = np.random.randint(100, size=(100, 100, 3))
r, g, b = image[:, :, 0], image[:, :, 1], image[:, :, 2]
result = np.dstack((r, g, b))
print("image shape", image.shape)
print("result shape", result.shape)
Выход
image shape (100, 100, 3)
result shape (100, 100, 3)
Я бы инициализировал переменную с нужной формой раньше:
img = imread("lena.jpg")
res = np.zeros_like(img) # or simply np.copy(img)
for channel in range(3):
res[:, :, channel] = filter(img[:,:,channel], filter)
res
в списке.np.stack(alist, axis=2)
можно использовать для объединения их в массив на последней осиchannel
.filter
как функция и переменная, остерегайтесь этого. Кроме того, какой фильтр вы используете? Я не вижу, чтобы ваша переменная фильтра изменялась в зависимости от канала, так почему бы не сделать 3D-фильтр и избежать цикла?