Как я могу сложить более двух numpy массивов изображений по третьему измерению в Python3 - PullRequest
3 голосов
/ 15 января 2020

Вот что я пробовал в Python3. Я знаю, что проблема в том, что я не могу сложить массивы разных форм, так как изначально, stacked_data будет пустым. Но мне нужно сложить большое количество данных в формате ndarray. И я не могу сделать это, передавая кортеж огромных чисел. Спасибо.

from numpy import *
from cv2 import *
import glob

folder_path = r'C:\Users\Administrator\Desktop\training\WorkWithMam\TestingImages/*.jpg'

image_path = []
for path in glob.glob(folder_path):
    image_path.append(path)

stacked_data = empty((19, 3024, 4032))
for path in folder_path:
    image = imread(path, 0)
    stack((stacked_data, image))

1 Ответ

4 голосов
/ 15 января 2020

Рекомендуемая форма stacked_data - (3024, 4032, 19), и вы можете заполнять кадры, используя синтаксис: stacked_data[:, :, i] = image.

Форма трехмерного массива показана здесь здесь :
enter image description here

Как видите, порядок: (высота , ширина глубина).

Вы можете использовать счетчик для индексации индекса "глубины" в каждой итерации:

stacked_data = empty((3024, 4032, 19))
i = 0  # Frame counter (index)

for path in folder_path:
    image = imread(path, 0)
    stacked_data[:, :, i] = image
    i += 1

Синтаксис секционирования stacked_data[:, :, i] = image означает: установить все в первом и втором измерении stacked_data (но индекс третьего измерения i) с соответствующими image значениями.

В Python всегда есть ярлыки ...
Вы можете использовать следующий синтаксис (используя функцию zip ):

stacked_data = empty((3024, 4032, 19))

for path, i in zip(folder_path, range(19)):
    stacked_data[:, :, i] = imread(path, 0)
...