Je voulais bientôt changer l'image de mon compte SNS, alors je l'ai fait avec Python. Laissez le code. Le contenu est le suivant
--Charger l'image
Sera. Il n'y a pas beaucoup d'attention, mais la conversion de points prendra un certain temps. (Environ 1 minute? Selon les spécifications de l'ordinateur)
Veuillez noter les points suivants lors de l'exécution par vous-même.
--Téléchargez l'image originale
Préparez et chargez l'image. Je le fais sur le notebook Jupiter. Dans ce cas, préparez une image et téléchargez-la à l'avance sur Notebook.
import numpy as np
import matplotlib.pyplot as plt
import cv2
#Chargement des images
img = plt.imread('shiro.jpg')
type(img)
img.size
plt.imshow(img) #Affichage de l'image
plt.show()
Ceci est l'image originale.
Ensuite, le traitement monochrome (noir et blanc) est effectué et sorti.
def img_show(img : np.ndarray, cmap = 'gray', vmin = 0, vmax = 255, interpolation = 'none') -> None:
plt.imshow(img, cmap = cmap, vmin = vmin, vmax = vmax, interpolation = interpolation) #Afficher l'image
plt.show()
plt.close()
img = plt.imread('shiro.jpg')
img_mid_v = np.max(img, axis = 2)/2 +np.min(img, axis = 2)/2
img_show(img_mid_v)
img = plt.imread('shiro.jpg')
Faites des points. Il peut être intéressant de jouer avec le nombre "dst = pixel_art (img, 0.1, 4)" comme vous le souhaitez. Une fois exécuté, un fichier tel que "hiro_mozaiku.jpg " sera envoyé vers Jupiter Notebook.
#Traitement de réduction de couleur
def sub_color(src, K):
Z = src.reshape((-1,3))
Z = np.float32(Z)
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)
ret, label, center = cv2.kmeans(Z, K, None, criteria, 10, cv2.KMEANS_RANDOM_CENTERS)
center = np.uint8(center)
res = center[label.flatten()]
return res.reshape((src.shape))
#Traitement de la mosaïque
def mosaic(img, alpha):
h, w, ch = img.shape
img = cv2.resize(img,(int(w*alpha), int(h*alpha)))
img = cv2.resize(img,(w, h), interpolation=cv2.INTER_NEAREST)
return img
#Peinture par points
def pixel_art(img, alpha=2, K=4):
img = mosaic(img, alpha)
return sub_color(img, K)
#Obtenir l'image d'entrée
img = cv2.imread("shiro.jpg ")
#Pictogramme de points Rugosité de l'image,Rugosité des couleurs
dst = pixel_art(img, 0.1, 4)
#Résultat de sortie
cv2.imwrite("shiro_mozaiku.jpg ", dst)
from PIL import Image
mozaiku_shiro = Image.open('shiro_mozaiku.jpg')
mozaiku_shiro
J'ai l'impression d'avoir fait quelque chose d'assez bon. C'est une photo de quand je suis parti en voyage, mais il semble que des bâtiments tels que des châteaux puissent être convertis en points de mosaïque. A part ça, je ne sais pas ce qu'il adviendra des gens et des paysages, mais il peut être intéressant de l'essayer.
Recommended Posts