2014-02-22 44 views
1

我想在python中製作一些strar軌跡圖片,而且我似乎缺少對圖像庫工作原理的一些基本瞭解。因爲在我的腦海中,它應該可以正常工作,只需將所有幀添加到一起,並將其除以幀數即可。在python中的星形圖像堆積

然而,這給出了一個完全黑色的圖片,而只是添加它們給出了下面的圖片。

代碼:

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

但我「M不知道這是如何不同。

打火機

ImageChops.lighter(圖像1,圖像2)⇒圖像

由像素比較兩個圖像,像素,並返回包含打火機值的新圖像 。

out = max(image1, image2) 

我得到這個尋找出來的打火機像素,但應該是平均權的一種形式? 有沒有辦法讓我的方式工作? (即使這意味着亮度降低)

回答

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只會在註冊了恆星的像素中返回不同的值,從而爲您提供路徑。

+0

好吧,似乎工作!但爲什麼我不能以第一種方式獲得正常的照片?以某種方式平均會很高興,因爲這會消除雲層:P – Coolcrab

+0

也許你可以從平均圖像中減去最大值的圖像?我不太熟悉圖像處理O :-)。不過,我和天文學家一起工作。讓我問.. –

+0

(關於第二個想法:不,這不會有太大幫助)。我得到的答案是:「爲什麼要除去雲呢?他們很好!」提示:不要問天文學家用眼睛去拍照... –