Bonsoir,
Tu donnes une dimension supplémentaire à ton tableau qui représente l'image finale:
	
	arr = numpy.zeros((h, w, 1), numpy.float)
 Alors que les tableaux de la boucle sont en 2d:
	
	imarr = numpy.array(Image.open(im), dtype=numpy.float)
 D'où l'erreur de concaténation.
Ceci a fonctionné pour moi:
	
	| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 
 | import os, numpy, PIL
from PIL import Image
 
os.chdir("/home/..." ) #ton chemin
 
dir_files = os.listdir(os.getcwd())
tiff_files = [filename for filename in dir_files if filename[-5:] == ".tiff"]
 
width, height = Image.open(tiff_files[0]).size
image_amount = len(tiff_files)
 
average = numpy.zeros((height, width), dtype=numpy.float)
 
for file in tiff_files:
    image = numpy.array(Image.open(file), dtype=numpy.float)
    average += image / image_amount
 
average = numpy.array(numpy.round(average), dtype=numpy.uint8)
 
out = Image.fromarray(average)
out.save("Average.tiff")
out.show() | 
 Il est aussi possible d'utiliser la fonction mean() de numpy. C'est certes plus compact mais au bout d'un seuil le temps d'exécution n'est plus compétitif face à la boucle (car on effectue des opérations sur des tableaux volumineux qui prennent beaucoup de mémoire):
	
	| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 
 | import os, numpy, scipy
import matplotlib.pyplot as plt
 
os.chdir("/home/..." ) #ton chemin 
dir_files = os.listdir(os.getcwd())
tiff_files = [filename for filename in dir_files if filename[-5:] == ".tiff"]
 
images = numpy.array([numpy.array(scipy.misc.imread(file), dtype=numpy.float) for file in tiff_files])
average = numpy.array(numpy.round(numpy.mean(images, axis=0)), dtype=numpy.uint8)
 
plt.imshow(average, cmap=plt.cm.gray)
plt.show() | 
 
						
					
Partager