Cette fois, je vais générer une image dégradée avec python en me référant à cet article.
Cette fois, nous allons générer une image en utilisant deux fonctions.
gradation_2d_color
def gradation_2d_color(start, stop, size, is_horizontal):
if is_horizontal:
return np.tile(np.linspace(start, stop, size[1]), (size[0], 1))
else:
return np.tile(np.linspace(start, stop, size[0]), (size[1], 1)).T
À l'aide de np.linspace, créez un tableau unidimensionnel de longueur hauteur (ou largeur) qui stocke les valeurs de la séquence de nombres d'égalité obtenue en divisant la plage du début à la fin par le nombre de hauteur (ou largeur), et créez-le avec np.tile. Crée un tableau bidimensionnel de longueur largeur (ou hauteur) qui est dupliqué et stocké par le nombre de largeur (ou hauteur). ・ Début: valeur du pixel de départ ・ Stop: valeur de pixel de fin ・ Taille: taille de l'image [hauteur, largeur] ・ Est_horizontal: Vrai → Changement de gradation horizontale / Faux → Changement de gradation verticale
gradation_3d_img
def gradation_3d_img(start_list, stop_list, size, is_horizontal_list):
result = np.zeros((size[0], size[1], len(start_list)), dtype=np.float)
for i, (start, stop, is_horizontal) in enumerate(zip(start_list, stop_list, is_horizontal_list)):
result[:, :, i] = gradation_2d_color(start, stop, size, is_horizontal)
return result
Passez la liste correspondant à chaque rgb. Le premier élément est le composant r, le deuxième élément est le composant g et le troisième élément est le composant b. -Start_list: Liste des valeurs de pixel de départ -Stop_list: Liste des valeurs de pixel de fin ・ Taille: Liste des tailles d'image ・ Is_horizontal_list: Liste des directions de changement
Utilisez ces fonctions pour générer une image dégradée.
main
size = [400,500] #height, width
#Horizontalement noir → blanc
img = gradation_3d_img([0,0,0], [255,255,255], size, [True,True,True])
img = img.astype(np.uint8)
img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
cv2.imwrite('out.png', img)
J'ai essayé d'autres paramètres avec différentes valeurs, avec une taille d'image réglée sur (400 500).
rgb (0,0,0)
→ rgb (255,255,255)
--direction de changement de RVB: [→, →, →]rgb (0,0,0)
→ rgb (255,255,255)
--Direction de changement de RVB: [↓, ↓, ↓]rgb (0,255,255)
→ rgb (255,255,255)
--direction de changement de RVB: [→, →, →]rgb (255,0,0)
→ rgb (0,255,255)
--direction de changement de RVB: [→, →, →]rgb (0,0,0)
→ rgb (255,255,255)
--Direction de changement de RVB: [↓, →, →]rgb (0,0,0)
→ rgb (255,255,255)
--Direction de changement de RVB: [↓, ↓, →]Cette gradation est exprimée en utilisant np.linspace qui génère une séquence d'égalité. Je pense que vous pouvez exprimer la gradation dans le sens où la valeur numérique change continuellement. Cependant, la question s'est posée que d'autres changements de gradation peuvent être exprimés numériquement. La prochaine fois, j'écrirai à ce sujet.
Recommended Posts