在 python 中对 10000 个图像数组中的每两个图像进行平均
averaging each two image in 10000 images array in python
我是 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")
提前谢谢你,
Python
您需要一种方法来获得 [[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
和 select 图像:
for pair in pairs:
average(imgs[pair[0]], imgs[pair[1]])
PS:请注意这会非常慢。更好的方法是使用 numpy
的 reshape
和 mean()
.
Numpy
假设您可以访问 numpy
并且您有 1000
个图像列表 imgs
。我正在生成 1000 个 25x25 数组作为图像:
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))
我是 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")
提前谢谢你,
Python
您需要一种方法来获得 [[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
和 select 图像:
for pair in pairs:
average(imgs[pair[0]], imgs[pair[1]])
PS:请注意这会非常慢。更好的方法是使用 numpy
的 reshape
和 mean()
.
Numpy
假设您可以访问 numpy
并且您有 1000
个图像列表 imgs
。我正在生成 1000 个 25x25 数组作为图像:
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))