星跟踪图像堆叠在python中

时间:2014-02-22 12:52:59

标签: python image

我正在尝试在python中制作一些strar trail图片,我似乎缺少对图像库如何工作的一些基本理解。因为在我的脑海中,它应该可以很好地将所有帧添加到一起并将其除以帧数。

然而,这会产生一个完全黑色的图片,而只是添加它们会给出下面的图片。

代码:

import Image
import numpy as num

data = num.genfromtxt('list.txt',dtype='str')

pic = 0

for i in range(len(data)):
    im1=Image.open(data[i])
    pic1=num.array(im1)
    pic = pic + pic1 
    print(i)

pic = pic/2

im = Image.fromarray(pic)
im.save("pytrail.jpg")
print(i/len(data))

结果: enter image description here

现在,如果我从网上获取一些代码:

from PIL import ImageChops
import os, Image

data = num.genfromtxt('list.txt',dtype='str')
finalimage=Image.open(data[0])
for i in range(1,len(data)):
    currentimage=Image.open(data[i])
    finalimage=ImageChops.lighter(finalimage, currentimage)
finalimage.save("allblended.jpg","JPEG")

我明白了: enter image description here

但我不确定这有什么不同。

  

打火机

     

ImageChops.lighter(image1,image2)⇒图像

     

逐个像素地比较两个图像,并返回一个新图像   包含较轻的值。

out = max(image1, image2)

我知道这会找到更亮的像素,但这应该是一种平均的形式吗? 有办法让我的方式工作吗? (即使这意味着亮度降低)

1 个答案:

答案 0 :(得分:1)

不是真正的平均值。我们来看一个简单的例子:

# Averaging
>>> a = np.array([1, 2, 3, 4, 5, 6])
>>> b = np.array([6, 5, 4, 3, 2, 1])
>>> (a + b) / 2
array([3, 3, 3, 3, 3, 3])

现在让我们为每个职位采取“更轻”的值:

>>> np.max([a, b], axis=0)
array([6, 5, 4, 4, 5, 6])

第二种方法应该适合你。只需“堆叠”图像并让Numpy返回一个具有每个图像最大值的新帧。在理想世界中,您的背景将完全相同,然后np.max将仅在您注册星星的像素中返回不同的值,为您提供路径。