Comment lire un fichier .tif (GeoTIFF ou TIFF) en Python ?

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.

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()

Comment lire un fichier .tif (GeoTIFF ou TIFF) en Python ?
Comment lire un fichier .tif (GeoTIFF ou TIFF) en Python ?

É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

Image

of