98 votes

Travailler avec des fichiers TIFF (importation, exportation) en Python en utilisant numpy

J'ai besoin d'une méthode python pour ouvrir et importer des images TIFF dans des tableaux numpy afin de pouvoir analyser et modifier les données des pixels, puis les sauvegarder à nouveau en tant que TIFF. (Ce sont essentiellement des cartes d'intensité lumineuse en niveaux de gris, représentant les valeurs respectives par pixel)

Je n'ai trouvé aucune documentation sur les méthodes PIL concernant les TIFF. J'ai essayé de comprendre, mais je n'ai obtenu que des erreurs "mauvais mode" ou "type de fichier non pris en charge".

De quoi ai-je besoin d'utiliser ici?

8voto

hnfl Points 141

Vous pouvez également utiliser pytiff dont je suis l'auteur.

import pytiff

with pytiff.Tiff("filename.tif") as handle:
    part = handle[100:200, 200:400]

# fichier tif multipage
with pytiff.Tiff("fichier_multipage.tif") as handle:
    for page in handle:
        part = page[100:200, 200:400]

C'est un module assez petit et peut ne pas avoir autant de fonctionnalités que d'autres modules, mais il prend en charge les TIFFs en mosaïque et le BigTIFF, vous permettant ainsi de lire des parties d'images volumineuses.

4voto

jd95 Points 147

Il existe un joli package appelé tifffile qui facilite grandement le travail avec les fichiers .tif ou .tiff.

Installez le package avec pip

pip install tifffile

Maintenant, pour lire un fichier .tif/.tiff sous forme de tableau numpy :

from tifffile import tifffile
image = tifffile.imread('chemin/vers/votre/image')
# type(image) = numpy.ndarray

Si vous souhaitez enregistrer un tableau numpy en tant que fichier .tif/.tiff :

tifffile.imwrite('mon_image.tif', mes_données_numpy, photometric='rgb')

ou

tifffile.imsave('mon_image.tif', mes_données_numpy)

Vous pouvez en savoir plus sur ce package ici.

1voto

Kukesh Points 393

Utilisation de cv2

import cv2
image = cv2.imread(tiff_file.tif)
cv2.imshow('tif image',image)

0voto

zeno Points 69

Je recommande d'utiliser les liaisons Python vers OpenImageIO, c'est la norme pour traiter différents formats d'image dans le monde des effets visuels. J'ai souvent trouvé qu'il était plus fiable dans la lecture de divers types de compression par rapport à PIL.

import OpenImageIO as oiio
input = oiio.ImageInput.open ("/chemin/vers/image.tif")

0voto

yuanzz Points 193

Si vous voulez enregistrer l'encodage tiff avec geoTiff. Vous pouvez utiliser le package rasterio

un code simple :

import rasterio

out = np.random.randint(low=10, high=20, size=(360, 720)).astype('float64')
new_dataset = rasterio.open('test.tiff', 'w', driver='GTiff',
                            height=out.shape[0], width=out.shape[1],
                            count=1, dtype=str(out.dtype),
                            )
new_dataset.write(out, 1)
new_dataset.close()

pour plus de détails sur numpy 2 GEOTiff. vous pouvez cliquer ici : https://gis.stackexchange.com/questions/279953/numpy-array-to-gtiff-using-rasterio-without-source-raster

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X