усреднение каждого из двух изображений в массиве 10000 изображений в python

#python #arrays #opencv #python-imaging-library #downsampling

Вопрос:

Я новичок в python. Интересно, можете ли вы дать мне представление о том, как я могу усреднить каждый последующий массив из двух изображений в матрице из 10000 изображений. Я хочу опробовать каденцию моего фильма. Я нашел следующий код, но я хочу усреднить матрицу изображений, а не формат png или jpeg.

     import os, numpy, PIL
from PIL import Image

# Access all PNG files in directory
allfiles=os.listdir(os.getcwd())
imlist=[filename for filename in allfiles if  filename[-4:] in[".tif",".TIF"]]

# Assuming all images are the same size, get dimensions of first image
w,h = Image.open(imlist[0]).size
N = len(imlist)

# Create a numpy array of floats to store the average (assume RGB images)
arr = numpy.zeros((h,w,3),numpy.float)

# Build up average pixel intensities, casting each image as an array of floats
for im in imlist:
    imarr = numpy.array(Image.open(im),dtype=numpy.float)
    arr = arr imarr/N

# Round values in array and cast as 16-bit integer
arr = numpy.array(numpy.round(arr),dtype=numpy.uint16)

# Generate, save and preview final image
out = Image.fromarray(arr,mode="RGB")
out.save("Average.tif") 
 

Заранее спасибо,

Комментарии:

1. вы говорите, что это «фильм», значит, видеофайл. для этого вам следует использовать ffmpeg

2. @ChristophRackwitz Я имею в виду последовательные кадры, у меня есть матрица [:,:,:] или в двойном формате.

Ответ №1:

Питон

Вам понадобится способ добраться [[img0, img1], [img2, img3], [img4, img5], ...] .

Таким образом, вам нужно будет сгенерировать числа как:

 0, 1
2, 3
4, 5
...
998, 999
 

Чтобы сгенерировать эти пары:

 pairs = [[2 * i, 2 * i   1] for i in range(500)]
 

Теперь вы можете прокручивать pairs и выбирать изображения как:

 for pair in pairs:
    average(imgs[pair[0]], imgs[pair[1]])
 

PS: Пожалуйста, обратите внимание, что это будет очень медленно. Лучшим способом было бы использовать numpy « reshape и mean() «.

Тупица

Допустим, у вас есть доступ numpy и у вас есть список 1000 изображений как imgs . Я создаю 1000 массивов 25×25 для изображений:

 import numpy as np

imgs = np.array([np.ones((25, 25)) * i for i in range(1000)])
image_pairs = imgs.reshape((500, 2, 25, 25))
print(np.mean(image_pairs, axis=1))
 

Комментарии:

1. Большое вам спасибо @MSH за ваш быстрый ответ! Я скоро попробую это на реальных данных и буду держать вас в курсе.