Я думал, что это будет легче, но через некоторое время я наконец отказываюсь от этого, по крайней мере, на пару часов ...
Я хотел воспроизвести это изображение в виде звездочек из набора фотографий с интервальной съемкой. Вдохновленный этим:
Оригинальный автор использовал видеокадры с низким разрешением, снятые с помощью VirtualDub и объединенные с imageJ. Я подумал, что мог бы легко воспроизвести этот процесс, но с более внимательным подходом к памяти с Python, поэтому я мог бы использовать исходные изображения с высоким разрешением для лучшего вывода.
Идея моего алгоритма проста: объединять два изображения за раз, а затем повторять, объединяя полученное изображение со следующим. Это сделано несколько сотен раз и правильно взвешено, чтобы каждое изображение имело одинаковый вклад в конечный результат.
Я довольно новичок в python (и я не профессиональный программист, это будет очевидно), но, глядя на него, мне кажется, что Python Imaging Library очень стандартна, поэтому я решил ее использовать (поправьте меня если вы думаете, что-то еще будет лучше).
Вот что у меня есть:
#program to blend many images into one
import os,Image
files = os.listdir("./")
finalimage=Image.open("./"+files[0]) #add the first image
for i in range(1,len(files)): #note that this will skip files[0] but go all the way to the last file
currentimage=Image.open("./"+files[i])
finalimage=Image.blend(finalimage,currentimage,1/float(i+1))#alpha is 1/i+1 so when the image is a combination of i images any adition only contributes 1/i+1.
print "\r" + str(i+1) + "/" + str(len(files)) #lousy progress indicator
finalimage.save("allblended.jpg","JPEG")
Это делает то, что должно, но получающееся изображение темное, и если я просто попытаюсь улучшить его, очевидно, что информация была потеряна из-за недостаточной глубины значений пикселей. (Я не уверен, что правильный термин здесь, глубина цвета, точность цвета, размер пикселя).
Вот конечный результат с использованием изображений с низким разрешением:
или один, который я пробовал с полным разрешением 4k на 2k (из другого набора фотографий):
Итак, я попытался это исправить, установив режим изображения:
firstimage=Image.open("./"+files[0])
size = firstimage.size
finalimage=Image.new("I",size)
но, видимо, Image.blend не принимает этот режим изображения.
ValueError: изображение имеет неправильный режим
Есть идеи?
(я также пытался сделать изображения «менее темными», умножив их, прежде чем объединить их с im.point (лямбда i: i * 2), но результаты были такими же плохими)