Introduction
Les fichiers TIFF et GeoTIFF sont largement utilisés pour stocker des images raster. Les fichiers TIFF sont des formats d’image généraux, tandis que les GeoTIFF contiennent des métadonnées géoréférencées, ce qui les rend essentiels en télédétection et en SIG.
Ce guide présente les différentes bibliothèques Python pour lire les fichiers .tif
, selon que vous travaillez avec des images satellites, des données scientifiques ou de simples images.
Table des matières
Objectif : Charger efficacement les fichiers .tif
et explorer ou manipuler les rasters en Python.
1. rasterio
(Idéal pour les GeoTIFF)
La bibliothèque rasterio
est conçue pour lire et écrire des fichiers raster géospatiaux (GeoTIFF, NetCDF, etc.). Elle lit les métadonnées géoréférencées comme le CRS, les limites, la matrice de transformation affine, etc.
Installation
1 | pip install rasterio |
Exemple de code
1 2 3 4 5 6 | import rasterio with rasterio.open("votre_fichier.tif") as src: data = src.read(1) # Lecture de la première bande print(data.shape) # Dimensions (hauteur, largeur) print(src.profile) # Métadonnées |
À retenir
src.read(1)
: lit la première bande.src.read()
: lit toutes les bandes → tableau 3D(bandes, lignes, colonnes)
.src.crs
: système de référence des coordonnées.src.transform
: matrice affine de transformation spatiale.src.bounds
: boîte englobante géographique.
Idéal pour : images satellites, DEM, données climatiques, détection d’incendies, etc.
2. tifffile
(Pour les TIFFs scientifiques ou multi-pages)
tifffile
est excellent pour lire des TIFFs multi-pages, scientifiques ou multidimensionnels. Il n’est pas géospatial, mais très rapide et puissant.
Installation
1 | pip install tifffile |
Exemple de code
1 2 3 4 | import tifffile as tiff img = tiff.imread("votre_fichier.tif") print(img.shape) |
À retenir
- Prend en charge les TIFFs empilés (multi-pages).
- Très utile pour les images scientifiques (microscopie, hyperspectral).
- Ne gère pas les métadonnées géospatiales.
Idéal pour : imagerie scientifique, microscopie, astronomie.
3. Pillow
(Pour une lecture simple d’image)
Pillow
(anciennement PIL) est une bibliothèque simple pour charger et manipuler des images. Elle peut lire les TIFFs, mais pas les métadonnées SIG.
Installation
1 | pip install pillow |
Exemple de code
1 2 3 4 5 6 | from PIL import Image import numpy as np img = Image.open("votre_fichier.tif") array = np.array(img) print(array.shape) |
À retenir
- Compatible avec PNG, JPEG, TIFF, etc.
- Pas de support du géoréférencement.
- Pratique pour créer des miniatures, appliquer des filtres, etc.
Idéal pour : images classiques sans données géospatiales.
4. OpenCV
(Pour le traitement rapide d’image)
OpenCV
est une bibliothèque puissante pour la vision par ordinateur. Elle lit les TIFFs rapidement pour des tâches de traitement d’image.
Installation
1 | pip install opencv-python |
Exemple de code
1 2 3 4 | import cv2 img = cv2.imread("votre_fichier.tif", cv2.IMREAD_UNCHANGED) print(img.shape) |
À retenir
- Support limité du multi-bande.
- Ne gère pas les métadonnées géospatiales.
- Lecture rapide, utile pour la vision par ordinateur.
Idéal pour : traitement d’image, détection de bords, pipelines CV.
5. Quelle bibliothèque choisir ?
Objectif | Meilleure option |
---|---|
Raster géospatial (GeoTIFF) | ✅ rasterio |
TIFF scientifique ou multi-pages | ✅ tifffile |
Visualisation simple d’image | ✅ Pillow |
Traitement rapide ou CV | ✅ OpenCV |
6. Exemple : Visualiser un GeoTIFF Natural Earth
Voici comment lire et visualiser un fichier GeoTIFF depuis Natural Earth, tel que :
NE1_HR_LC_SR_W_DR.tif
– raster en résolution 10m avec relief ombré, couverture terrestre et hydrographie.
Étape 1 : Lecture et inspection
1 2 3 4 5 6 7 | import rasterio with rasterio.open("NE1_HR_LC_SR_W_DR.tif") as src: r = src.read(1) # Bande rouge g = src.read(2) # Bande verte b = src.read(3) # Bande bleue print(src.profile) |
Dimensions : (10800, 21600)
→ Résolution d’environ 10 minutes d’arc (\~20 km à l’équateur)
Étape 2 : Affichage avec matplotlib
1 2 3 4 5 6 7 8 9 10 | import numpy as np import matplotlib.pyplot as plt rgb = np.dstack((r, g, b)) plt.figure(figsize=(14, 7)) plt.imshow(rgb) plt.title("Relief ombré Natural Earth (RGB)") plt.axis('off') plt.show() |
Étape 3 : Réduction de taille (downsampling)
1 2 3 4 5 6 7 8 9 | from skimage.transform import resize rgb_small = resize(rgb, (1080, 2160), preserve_range=True).astype(np.uint8) plt.figure(figsize=(12, 6)) plt.imshow(rgb_small) plt.title("Image Natural Earth réduite") plt.axis('off') plt.show() |
Étape 4 : Affichage avec coordonnées géographiques (cartopy
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | import cartopy.crs as ccrs import cartopy.feature as cfeature with rasterio.open("NE1_HR_LC_SR_W_DR.tif") as src: rgb = np.dstack([src.read(i) for i in [1, 2, 3]]) extent = [src.bounds.left, src.bounds.right, src.bounds.bottom, src.bounds.top] plt.figure(figsize=(16, 8)) ax = plt.axes(projection=ccrs.PlateCarree()) ax.imshow(rgb, extent=extent, transform=ccrs.PlateCarree()) ax.add_feature(cfeature.BORDERS) ax.add_feature(cfeature.COASTLINE) ax.set_title("Carte de base Natural Earth avec frontières") plt.show() |
7. Références
Bibliothèque | Lien |
---|---|
Pillow | https://pillow.readthedocs.io/ |
Rasterio | https://rasterio.readthedocs.io/ |
tifffile | https://pypi.org/project/tifffile/ |
OpenCV | https://docs.opencv.org/ |
Natural Earth | https://www.naturalearthdata.com/ |