Skip to content

En traitant les images comme un tableau NumPy ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ซโ€Œ๐ซโ€Œ๐šโ€Œ๐ฒโ€Œ , vous pouvez manipuler des images existantes ou gรฉnรฉrer de nouvelles images ร  l’aide des fonctions NumPy.

Cet article prรฉsente un exemple de gรฉnรฉration d’une image en dรฉgradรฉ avec les fonctions NumPy.

  • ๐งโ€Œ๐ฉโ€Œ.๐ฅโ€Œ๐ขโ€Œ๐งโ€Œ๐ฌโ€Œ๐ฉโ€Œ๐šโ€Œ๐œโ€Œ๐žโ€Œ() et ๐งโ€Œ๐ฉโ€Œ.๐ญโ€Œ๐ขโ€Œ๐ฅโ€Œ๐žโ€Œ()
  • Exemple de code pour gรฉnรฉrer une image en dรฉgradรฉ

๐งโ€Œ๐ฉโ€Œ.๐ฅโ€Œ๐ขโ€Œ๐งโ€Œ๐ฌโ€Œ๐ฉโ€Œ๐šโ€Œ๐œโ€Œ๐žโ€Œ() et ๐งโ€Œ๐ฉโ€Œ.๐ญโ€Œ๐ขโ€Œ๐ฅโ€Œ๐žโ€Œ()

Bien que diffรฉrentes mรฉthodes soient envisageables, dans cet article, nous allons crรฉer une image en dรฉgradรฉ selon le flux suivant.

  • Gรฉnรฉrez des tableaux 1D qui augmentent ou diminuent ร  intervalles rรฉguliers avec ๐งโ€Œ๐ฎโ€Œ๐ฆโ€Œ๐ฉโ€Œ๐ฒโ€Œ.๐ฅโ€Œ๐ขโ€Œ๐งโ€Œ๐ฌโ€Œ๐ฉโ€Œ๐šโ€Œ๐œโ€Œ๐žโ€Œ()
  • Organisez-le en 2D avec ๐งโ€Œ๐ฎโ€Œ๐ฆโ€Œ๐ฉโ€Œ๐ฒโ€Œ.๐ญโ€Œ๐ขโ€Œ๐ฅโ€Œ๐žโ€Œ()

La direction du dรฉgradรฉ est uniquement verticale ou horizontale. Elle ne prend pas en charge les dรฉgradรฉs diagonaux ou radiaux (ronds).

๐งโ€Œ๐ฉโ€Œ.๐ฅโ€Œ๐ขโ€Œ๐งโ€Œ๐ฌโ€Œ๐ฉโ€Œ๐šโ€Œ๐œโ€Œ๐žโ€Œ()

๐งโ€Œ๐ฉโ€Œ.๐ฅโ€Œ๐ขโ€Œ๐งโ€Œ๐ฌโ€Œ๐ฉโ€Œ๐šโ€Œ๐œโ€Œ๐žโ€Œ() est une fonction qui renvoie un tableau 1D รฉquidistant, รฉtant donnรฉ la valeur de dรฉpart ๐ฌโ€Œ๐ญโ€Œ๐šโ€Œ๐ซโ€Œ๐ญโ€Œ , la valeur de fin ๐ฌโ€Œ๐ญโ€Œ๐จโ€Œ๐ฉโ€Œ et le nombre d’รฉchantillons ๐งโ€Œ๐ฎโ€Œ๐ฆโ€Œ .

Contrairement ร  ๐ซโ€Œ๐šโ€Œ๐งโ€Œ๐ โ€Œ๐žโ€Œ() et ๐งโ€Œ๐ฉโ€Œ.๐šโ€Œ๐ซโ€Œ๐šโ€Œ๐งโ€Œ๐ โ€Œ๐žโ€Œ() , ๐งโ€Œ๐ฉโ€Œ.๐ฅโ€Œ๐ขโ€Œ๐งโ€Œ๐ฌโ€Œ๐ฉโ€Œ๐šโ€Œ๐œโ€Œ๐žโ€Œ() est pratique car il calcule automatiquement les intervalles (รฉtapes).

import numpy as np print(np.linspace(0, 10, 3)) # [ 0. 5. 10.] print(np.linspace(0, 10, 4)) # [ 0. 3.33333333 6.66666667 10. ] print(np.linspace(0, 10, 5)) # [ 0. 2.5 5. 7.5 10. ] 

Il sera gรฉrรฉ correctement si ๐ฌโ€Œ๐ญโ€Œ๐šโ€Œ๐ซโ€Œ๐ญโ€Œ > ๐ฌโ€Œ๐ญโ€Œ๐จโ€Œ๐ฉโ€Œ .

print(np.linspace(10, 0, 5)) # [10. 7.5 5. 2.5 0. ] 

Consultez l’article suivant pour plus de dรฉtails sur ๐งโ€Œ๐ฉโ€Œ.๐šโ€Œ๐ซโ€Œ๐šโ€Œ๐งโ€Œ๐ โ€Œ๐žโ€Œ() et ๐งโ€Œ๐ฉโ€Œ.๐ฅโ€Œ๐ขโ€Œ๐งโ€Œ๐ฌโ€Œ๐ฉโ€Œ๐šโ€Œ๐œโ€Œ๐žโ€Œ() .

๐งโ€Œ๐ฉโ€Œ.๐ญโ€Œ๐ขโ€Œ๐ฅโ€Œ๐žโ€Œ()

๐งโ€Œ๐ฉโ€Œ.๐ญโ€Œ๐ขโ€Œ๐ฅโ€Œ๐žโ€Œ() est une fonction qui organise le tableau verticalement et horizontalement.

Il est utile pour crรฉer un tableau qui rรฉpรจte des motifs.

Dรฉfinissez le tableau d’origine et le nombre d’itรฉrations. Lors de l’organisation en deux dimensions, le nombre de rรฉpรฉtitions est (๐ญโ€Œ๐กโ€Œ๐žโ€Œ ๐งโ€Œ๐ฎโ€Œ๐ฆโ€Œ๐›โ€Œ๐žโ€Œ๐ซโ€Œ ๐จ๐ฎ๐ญ๐ขโ€Œ๐ญโ€Œ๐ขโ€Œ๐จโ€Œ๐งโ€Œ๐ฌโ€Œ ๐จ๐ฎ๐ญ ๐ซโ€Œ๐จโ€Œ๐ฐโ€Œ๐ฌโ€Œ (๐ฏ๐ž๐ซโ€Œ๐ญโ€Œ๐ขโ€Œ๐œโ€Œ๐šโ€Œ๐ฅโ€Œ), ๐ญ๐ž๐ฌ .. . . . .

import numpy as np a = np.array([0, 1, 2, 3]) print(np.tile(a, 2)) # [0 1 2 3 0 1 2 3] print(np.tile(a, (3, 2))) # [[0 1 2 3 0 1 2 3] # [0 1 2 3 0 1 2 3] # [0 1 2 3 0 1 2 3]] print(np.tile(a, (2, 1))) # [[0 1 2 3] # [0 1 2 3]] 
source : numpy_tile.py

Les tableaux 2D peuvent รชtre traitรฉs de la mรชme maniรจre.

a = np.array([[11, 12], [21, 22]]) print(np.tile(a, 2)) # [[11 12 11 12] # [21 22 21 22]] print(np.tile(a, (3, 2))) # [[11 12 11 12] # [21 22 21 22] # [11 12 11 12] # [21 22 21 22] # [11 12 11 12] # [21 22 21 22]] print(np.tile(a, (2, 1))) # [[11 12] # [21 22] # [11 12] # [21 22]] 
source : numpy_tile.py

Consultez l’article suivant pour plus d’informations sur ๐งโ€Œ๐ฉโ€Œ.๐ญโ€Œ๐ขโ€Œ๐ฅโ€Œ๐žโ€Œ() .

Exemple de code pour gรฉnรฉrer une image en dรฉgradรฉ

Dรฉfinissez une fonction qui gรฉnรจre une ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ซโ€Œ๐ซโ€Œ๐šโ€Œ๐ฒโ€Œ 2D qui augmente ou diminue ร  intervalles rรฉguliers dans la direction verticale ou horizontale. Cette ๐งโ€Œ๐โ€Œ๐šโ€Œ๐ซโ€Œ๐ซโ€Œ๐šโ€Œ๐ฒโ€Œ correspond ร  une image en dรฉgradรฉ monochrome (en niveaux de gris).

La valeur change dans le sens horizontal lorsque ๐ขโ€Œ๐ฌโ€Œ_๐กโ€Œ๐จโ€Œ๐ซโ€Œ๐ขโ€Œ๐ณโ€Œ๐จโ€Œ๐งโ€Œ๐ญโ€Œ๐šโ€Œ๐ฅโ€Œ est T๐ซโ€Œ๐ฎโ€Œ๐žโ€Œ et dans le sens vertical lorsque F๐šโ€Œ๐ฅโ€Œ๐ฌโ€Œ๐žโ€Œ . Pour une orientation verticale, utilisez .T pour crรฉer une matrice transposรฉe.

def get_gradient_2d(start, stop, width, height, is_horizontal): if is_horizontal: return np.tile(np.linspace(start, stop, width), (height, 1)) else: return np.tile(np.linspace(start, stop, height), (width, 1)).T 

ร‰tendez cette option ร  trois dimensions. Dรฉfinissez ๐ฌโ€Œ๐ญโ€Œ๐šโ€Œ๐ซโ€Œ๐ญโ€Œ , ๐ฌโ€Œ๐ญโ€Œ๐จโ€Œ๐ฉโ€Œ et ๐ขโ€Œ๐ฌโ€Œ_๐กโ€Œ๐จโ€Œ๐ซโ€Œ๐ขโ€Œ๐ณโ€Œ๐จโ€Œ๐งโ€Œ๐ญโ€Œ๐šโ€Œ๐ฅโ€Œ pour chaque couleur d’une liste et crรฉer une image de dรฉgradรฉ pour chaque canal avec la fonction pour 2D.

def get_gradient_3d(width, height, start_list, stop_list, is_horizontal_list): result = np.zeros((height, width, len(start_list)), dtype=np.float) for i, (start, stop, is_horizontal) in enumerate(zip(start_list, stop_list, is_horizontal_list)): result[:, :, i] = get_gradient_2d(start, stop, width, height, is_horizontal) return result 

Voici un exemple de gรฉnรฉration et d’enregistrement d’une image en dรฉgradรฉ.

from PIL import Image array = get_gradient_3d(512, 256, (0, 0, 0), (255, 255, 255), (True, True, True)) Image.fromarray(np.uint8(array)).save('data/dst/gray_gradient_h.jpg', quality=95) 

Image en dรฉgradรฉ de gris NumPy horizontale

array = get_gradient_3d(512, 256, (0, 0, 0), (255, 255, 255), (False, False, False)) Image.fromarray(np.uint8(array)).save('data/dst/gray_gradient_v.jpg', quality=95) 

Image en dรฉgradรฉ de gris NumPy verticale

Il est รฉgalement possible de modifier la direction du dรฉgradรฉ pour chaque RVB.

array = get_gradient_3d(512, 256, (0, 0, 192), (255, 255, 64), (True, False, False)) Image.fromarray(np.uint8(array)).save('data/dst/color_gradient.jpg', quality=95) 

Image de dรฉgradรฉ de couleurs NumPy