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

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)

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)

