Tôi nghĩ rằng điều này sẽ dễ dàng hơn nhưng sau một thời gian tôi cuối cùng đã từ bỏ việc này, ít nhất là trong một vài giờ ...Xếp chồng hình ảnh thiên văn học với Python
Tôi muốn tạo lại dấu vết này sao hình ảnh từ một tập hợp các hình ảnh timelapse. Lấy cảm hứng từ điều này:
The original author sử dụng khung video có độ phân giải thấp được chụp bằng VirtualDub và kết hợp với imageJ. Tôi tưởng tượng rằng tôi có thể dễ dàng tái tạo quy trình này nhưng với một cách tiếp cận có ý thức về bộ nhớ hơn với Python, vì vậy tôi có thể sử dụng the original high-resolution images để có kết quả tốt hơn.
Ý tưởng của thuật toán của tôi rất đơn giản, hợp nhất hai hình ảnh cùng một lúc và sau đó lặp lại bằng cách hợp nhất hình ảnh kết quả với hình ảnh tiếp theo. Điều này đã thực hiện hàng trăm lần và cân đúng cách để mỗi hình ảnh có cùng đóng góp cho kết quả cuối cùng.
Tôi khá mới với python (và tôi không có lập trình viên chuyên nghiệp), nhưng nhìn xung quanh nó xuất hiện với tôi Thư viện hình ảnh Python rất chuẩn, vì vậy tôi quyết định sử dụng nó (đúng tôi nếu bạn nghĩ cái gì khác sẽ tốt hơn).
Dưới đây là những gì tôi có cho đến nay:
#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")
này làm những gì nó nghĩ đến nhưng hình ảnh kết quả là bóng tối, và nếu tôi chỉ đơn giản là cố gắng để nâng cao nó, đó là điều hiển nhiên rằng thông tin bị mất thiếu do chiều sâu trong các giá trị của pixel. (Tôi không chắc chắn những gì các thuật ngữ thích hợp ở đây là, độ sâu màu, độ chính xác màu sắc, kích thước pixel). Dưới đây là kết quả cuối cùng sử dụng hình ảnh độ phân giải thấp:
hoặc một tôi đã cố gắng với đầy đủ 4k bởi độ phân giải 2k (từ một tập hợp các hình ảnh):
Vì vậy, Tôi đã cố khắc phục sự cố bằng cách đặt chế độ hình ảnh:
firstimage=Image.open("./"+files[0])
size = firstimage.size
finalimage=Image.new("I",size)
nhưng rõ ràng là Image.blend d oes không chấp nhận chế độ hình ảnh đó.
ValueError: image has wrong mode
Bất kỳ ý tưởng nào?
(Tôi cũng đã cố gắng làm cho hình ảnh "ít đen tối" bằng cách nhân nó trước khi kết hợp chúng với im.point (lambda i: i * 2) nhưng kết quả chỉ là xấu)
Hình ảnh của bạn không có trọng số như nhau. Ví dụ, hình ảnh đầu tiên của bạn có opacity '1/(1 + 1) = 0,5', trong khi hình ảnh thứ 9 của bạn có độ mờ' 0.1'. – Blender
Máy xay sinh tố, tôi nghĩ nó có trọng số như nhau. khi i = 0, 1/(i + 1) = 1, thì đối với lần lặp đầu tiên có hình ảnh là 0,5 vì 0,5 khác được chụp bởi ảnh thứ hai (tệp [1]), và sau đó khi i = 2 , tệp [2] có trọng số là 0,33, để hai kết quả đầu tiên được kết hợp với tổng số 0,66 .. tức là 0,33 mỗi. Vì vậy, hình ảnh thứ 9 thực sự có 0,1 alpha, nhưng điều đó có nghĩa là 8 đầu tiên có độ mờ kết hợp là 0,9, tức là 0,1 mỗi hình ảnh (xem tệp [0]). – JunCTionS
Không, @Blender là đúng, bạn cần một * trọng lượng không đổi cho mỗi hình ảnh *, có nghĩa là '1/len (tệp)'. Nếu bạn có 2 hình ảnh tổng cộng mỗi hình ảnh được trọng lượng 0,5. Nếu bạn có tổng cộng 10 hình ảnh, mỗi hình ảnh sẽ có trọng số 0,1. –