Ich denke, es gibt viele Leute, die Fotos auf SNS teilen, einschließlich Instagram. Zu diesem Zeitpunkt denke ich, dass Sie die App verwenden können, um das Bild zu verarbeiten. Es verfügt über verschiedene Funktionen wie das Anpassen von Helligkeit und Farbe, das Retuschieren, um die Haut schön aussehen zu lassen, und das Verarbeiten von Fotos in einem Skizzenstil.
Dieses Mal habe ich eine einfache skizzenhafte Bildverarbeitung mit OpenCV versucht.
Die Umgebung verwendet Google Colaboratory. Die Python-Version ist unten.
import platform
print("python " + platform.python_version())
# python 3.6.9
Jetzt schreiben wir den Code. Importieren und stellen Sie zunächst die Bibliothek ein, die zum Anzeigen des Bildes erforderlich ist.
import cv2
import matplotlib.pyplot as plt
import matplotlib
%matplotlib inline
matplotlib.rcParams['image.cmap'] = 'gray'
Bereiten Sie auch ein Beispielbild vor. Dieses Mal werde ich das kostenlose Bild von Pixabay verwenden.
Lassen Sie uns nun das vorbereitete Beispielbild anzeigen.
image = cv2.imread(input_file) # input_Datei ist der Pfad des Bildes
plt.figure(figsize=[10,10])
plt.axis('off')
plt.imshow(image[:,:,::-1])
Verwenden wir nun OpenCV, um dieses Bild wie eine Skizze zu verarbeiten. Der Code ist unten.
def sketch(image):
pencilSketch_img = pencilSketch(image)
bilateral_img = cv2.bilateralFilter(image, 75, 100, 100)
sketch_img = cv2.bitwise_and(bilateral_img, pencilSketch_img)
return sketch_img
def pencilSketch(image):
gray_img = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
median_img = cv2.medianBlur(gray_img, 5)
laplacian_img = cv2.Laplacian(median_img, cv2.CV_8U, ksize=5)
_, thresh_img = cv2.threshold(laplacian_img, 100, 255, cv2.THRESH_BINARY_INV)
pencilSketch_img = cv2.cvtColor(thresh_img, cv2.COLOR_GRAY2BGR)
return pencilSketch_img
sketch = sketch(image)
plt.figure(figsize=[20,10])
plt.subplot(121);plt.imshow(image[:,:,::-1]);plt.axis('off')
plt.title("original image")
plt.subplot(122);plt.imshow(sketch[:,:,::-1]);plt.axis('off')
plt.title("sketch image")
Der Prozess der Verarbeitung wie eine Skizze wird als Skizzenfunktion definiert. Der Verarbeitungsablauf der Skizzenfunktion ist wie folgt.
Die Reihenfolge ist, eine Linie mit einem Bleistift zu zeichnen und sie zu malen.
Jeder Prozess wird unten erklärt.
Der Prozess der Verarbeitung wie eine Bleistiftzeichnung wird als Bleistift-Skizzen-Funktion definiert. Der Verarbeitungsablauf der PencilSketch-Funktion ist wie folgt.
Ich werde das Bild anzeigen.
image = cv2.imread(input_file) #Laden des Originalbildes
pencilSketch_img = pencilSketch(image) #Bleistift-Stil Bild
plt.figure(figsize=[20,10])
plt.subplot(121);plt.axis('off');plt.imshow(image[:,:,::-1])
plt.subplot(122);plt.axis('off');plt.imshow(pencilSketch_img[:,:,::-1])[
Einzelheiten zur Funktion PencilSketch finden Sie unter hier.
** Glätten ** oder Glätten ist einfach ** Unschärfe des Bildes **. Man kann auch sagen, dass das Verwischen des Bildes die Änderung des Pixelwerts glättet. Rauschen und Kanten sind plötzliche Änderungen der Pixelwerte. Durch das Glätten können Kanten beseitigt oder weniger auffällig gemacht werden.
Es gibt verschiedene Methoden zum Glätten, und der bilaterale Filter ist eine davon. Bilateral bedeutet "beides", aber dieser Filter kann Kanten schön hinterlassen. Der Glättungsfilter verwischt das Bild, einschließlich Spitzen wie Kanten. Sie können den ** bilateralen Filter ** verwenden, um das Bild zu verwischen, während Sie ** Kanten ** lassen.
Weitere Informationen zum Glätten finden Sie unter hier.
Der Code für bilateralFilter ist unten.
bilateral_img = cv2.bilateralFilter(image, 75, 100, 100)
plt.figure(figsize=[20,10])
plt.subplot(121);plt.axis('off');plt.imshow(image[:,:,::-1])
plt.subplot(122);plt.axis('off');plt.imshow(bilateral_img[:,:,::-1])
Sie können sehen, dass das Bild verschwommen ist.
Ich habe cv2.bilateralFilter verwendet, um das Bild zu glätten. Die Verwendung von cv2.bilateralFilter ist wie folgt.
Schließlich wird die Maskenverarbeitung verwendet, um das Farbbild und das Skizzenbild im Bleistiftzeichnungsstil zu kombinieren. Verwenden Sie cv2.bitwise_and zum Maskieren. cv2.bitwise_and ist eine Funktion, die die bitweise UND-Verarbeitung von zwei Bildern durchführt.
Der Maskierungscode ist unten.
merged_img = cv2.bitwise_and(bilateral_img, pencilSketch_img)
plt.figure(figsize=[20,10])
plt.subplot(121);plt.axis('off');plt.imshow(bilateral_img[:,:,::-1])
plt.subplot(122);plt.axis('off');plt.imshow(merged_img[:,:,::-1])
Ich konnte erfolgreich eine Skizze im Bleistiftzeichnungsstil auf ein Farbbild setzen.
Wie war das.
Dieses Mal habe ich versucht, eine skizzenhafte Bildverarbeitung mit OpenCV durchzuführen. Lassen Sie uns den Verarbeitungsablauf überprüfen.
Ich denke, es wäre interessant, ein Bild durch Ändern verschiedener Parameter auszugeben.
Recommended Posts