【问题标题】:averaging each two image in 10000 images array in python在python中平均10000个图像数组中的每两个图像
【发布时间】:2021-10-26 09:57:27
【问题描述】:

我是 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") 

提前谢谢你,

【问题讨论】:

  • 你说它是“电影”,所以是视频文件。你应该为此使用ffmpeg
  • @ChristophRackwitz 我的意思是连续帧,我有一个矩阵 [:,:,:] 或双格式。

标签: python arrays opencv python-imaging-library downsampling


【解决方案1】:

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 并选择图像:

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

PS:请注意这会很慢。更好的方法是使用numpyreshapemean()

麻木

假设您有权访问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))

【讨论】:

  • 非常感谢@MSH 的快速回答!我会尽快在真实数据上进行尝试,并与您保持联系。
猜你喜欢
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-12
  • 1970-01-01
  • 2014-08-02
相关资源
最近更新 更多