Ich wollte das Image meines SNS-Kontos bald ändern, also habe ich es mit Python gemacht. Lass den Code. Der Inhalt sind die folgenden drei
--Bild laden
Wird sein. Es gibt nicht viel Aufmerksamkeit, aber die Punktkonvertierung wird einige Zeit dauern. (Ca. 1 Minute? Abhängig von den technischen Daten des PCs)
Bitte beachten Sie die folgenden Punkte, wenn Sie selbst ausführen.
Bereiten Sie das Bild vor und laden Sie es. Ich mache es auf dem Jupiter Notebook. Bereiten Sie in diesem Fall ein Bild vor und laden Sie es vorab auf Notebook hoch.
import numpy as np
import matplotlib.pyplot as plt
import cv2
#Bilder laden
img = plt.imread('shiro.jpg')
type(img)
img.size
plt.imshow(img) #Bildschirm
plt.show()
Dies ist das Originalbild.
Als nächstes wird eine Schwarzweißverarbeitung (Schwarzweißverarbeitung) durchgeführt und ausgegeben.
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) #Bild anzeigen
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')
Punkte machen. Es kann interessant sein, mit der Zahl "dst = pixel_art (img, 0.1, 4)" zu spielen, wie Sie möchten. Bei der Ausführung wird eine Datei wie'shiro_mozaiku.jpg 'an Jupiter Notebook ausgegeben.
#Farbreduktionsverarbeitung
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))
#Mosaikverarbeitung
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
#Punktmalerei
def pixel_art(img, alpha=2, K=4):
img = mosaic(img, alpha)
return sub_color(img, K)
#Eingabebild abrufen
img = cv2.imread("shiro.jpg ")
#Punktpiktogramm Bildrauheit,Farbrauheit
dst = pixel_art(img, 0.1, 4)
#Ausgabeergebnis
cv2.imwrite("shiro_mozaiku.jpg ", dst)
from PIL import Image
mozaiku_shiro = Image.open('shiro_mozaiku.jpg')
mozaiku_shiro
Es fühlt sich an, als hätte ich etwas ziemlich Gutes gemacht. Dies ist ein Bild von meiner Reise, aber es scheint, dass Gebäude wie Burgen in Mosaikpunkte umgewandelt werden können. Abgesehen davon weiß ich nicht, was mit Menschen und Landschaften passieren wird, aber es kann interessant sein, es zu versuchen.
Recommended Posts