Zeichnen Sie eine Illustration mit Python + OpenCV

1. Zuallererst

Ich habe eine Illustration mit Python + OpenCV geschrieben. Ich kann kein Bild zeichnen, weil ich kein Zeichenherz habe → Ich kann ein Programm schreiben → Es ist eine rücksichtslose Idee, ein Bild mit einem Programm zu zeichnen. Alle Positionen der Linien sind fest spezifiziert, und ich habe nichts Schwieriges getan.

2. Ausführungsergebnis

20191127.PNG

3. Ganzes Skript

girl1.py


import numpy as np
import cv2

#Mit Weiß füllen
img = np.full((600, 800, 3), 255, dtype=np.uint8)

#Hilfsleitung
#cv2.rectangle(img, (300, 300), (500, 500), (127, 127, 127), 1, cv2.LINE_AA)
#cv2.line(     img, (300, 400), (500, 400), (127, 127, 127), 1, cv2.LINE_AA)
#cv2.line(     img, (400, 300), (400, 500), (127, 127, 127), 1, cv2.LINE_AA)
#cv2.line(     img, (300, 450), (500, 450), (127, 127, 127), 1, cv2.LINE_AA)
#cv2.line(     img, (300, 435), (500, 435), (127, 127, 127), 1, cv2.LINE_AA)
#cv2.circle(   img, (400, 400), 100, (127, 127, 127), 1, cv2.LINE_AA)
#cv2.ellipse(  img, ((400, 400), (170, 200), 0), (127, 127, 127), 1, cv2.LINE_AA)

#Haarfüllung Ich kann es nicht gut füllen, wenn ich alle miteinander verbinde, also teile ich es in vier Teile
pts1_1 = np.array([

#Haar(Direkt drausen)
	(400, 270),
	(415, 271),
	(430, 273),
	(440, 276),
	(450, 280),
	(460, 285),
	(470, 290),
	(480, 298),
	(490, 309),
	(495, 315),
	(500, 330),
	(504, 340),
	(507, 350),
	(509, 360),
	(510, 370),
	(510, 400),
	(509, 430),
	(507, 460),
	(504, 500),

#Hals(richtig)
	(424, 500),
	(425, 491),

#Kontur rechts(Ohne Ohren)
	(430, 489),
	(440, 485),
	(450, 480),
	(460, 470),
	(465, 458),

	(467, 450),
	(475, 447),
	(478, 440),
	(480, 434),
	(475, 430),

	(479, 420),
	(482, 410),
	(485, 400),
	(488, 390),

#Haar(Gleich drinnen)Auf halber Strecke
	(488, 390),
	(480, 385),

	(456, 378),
	(452, 350),
	(448, 330),

], dtype=np.int32)
cv2.fillConvexPoly(img, pts1_1, (127, 127, 127))

#Haare füllen
pts1_2 = np.array([
#Oberseite des Kopfes
	(400, 270),

#Haar(Gleich drinnen)Aus der Mitte
	(440, 315),
	(444, 330),
	(448, 350),

	(450, 376),
	(430, 372),
	(405, 370),
	(404, 350),
	(403, 325),
	(402, 320),
	(401, 310),
	(400, 305),

], dtype=np.int32)
cv2.fillConvexPoly(img, pts1_2, (127, 127, 127))

#Haare füllen
pts1_3 = np.array([
#Oberseite des Kopfes
	(400, 270),

#Haar(Links drinnen)Auf halber Strecke
#	(400, 305),
	(399, 310),
	(398, 320),
	(397, 325),
	(396, 350),
	(395, 370),
	(370, 372),
	(350, 376),

	(352, 350),
	(356, 330),
	(360, 315),

], dtype=np.int32)
cv2.fillConvexPoly(img, pts1_3, (127, 127, 127))

#Haare füllen
pts1_4 = np.array([

#Haar(Links drinnen)Aus der Mitte
	(352, 330),
	(348, 350),
	(344, 378),

	(320, 385),
	(312, 390),

#Kontur links(Ohne Ohren)
	(312, 390),
	(315, 400),
	(318, 410),
	(321, 420),

	(325, 430),
	(320, 434),
	(322, 440),
	(325, 447),
	(333, 450),

	(335, 458),
	(340, 470),
	(350, 480),
	(360, 485),
	(370, 489),

#Hals(links)
	(375, 491),
	(376, 500),

#Haar(Draußen gelassen)
	(296, 500),
	(293, 460),
	(291, 430),
	(290, 400),
	(290, 370),
	(291, 360),
	(293, 350),
	(296, 340),
	(300, 330),
	(305, 315),
	(310, 309),
	(320, 298),
	(330, 290),
	(340, 285),
	(350, 280),
	(360, 276),
	(370, 273),
	(385, 271),
	(400, 270),

], dtype=np.int32)
cv2.fillConvexPoly(img, pts1_4, (127, 127, 127))

#Kontur
pts2 = np.array([
#	(400, 300),
#	(410, 301),
#	(420, 303),
#	(430, 306),
#	(440, 310),
#	(450, 315),
#	(460, 320),
#	(470, 328),
#	(480, 339),
#	(485, 345),
#	(491, 360),
#	(491, 370),
#	(490, 380),
	(488, 390),
	(485, 400),
	(482, 410),
	(479, 420),
	(475, 430),
	(470, 440),
	(465, 458),
	(460, 470),
	(450, 480),
	(440, 485),
	(430, 489),
	(420, 493),
	(410, 497),
	(400, 500),
	(390, 497),
	(380, 493),
	(370, 489),
	(360, 485),
	(350, 480),
	(340, 470),
	(335, 458),
	(330, 440),
	(325, 430),
	(321, 420),
	(318, 410),
	(315, 400),
	(312, 390),
#	(310, 380),
#	(309, 370),
#	(309, 360),
#	(315, 345),
#	(320, 339),
#	(330, 328),
#	(340, 320),
#	(350, 315),
#	(360, 310),
#	(370, 306),
#	(380, 303),
#	(390, 301),
#	(400, 300),
], dtype=np.int32)
cv2.polylines(img, [pts2], False, (  0,   0,   0), 2, cv2.LINE_AA)

#rechtes Auge
cv2.ellipse(  img, (440, 430), ( 12,  20), 180, 0, 180, (127, 127, 127), -1, cv2.LINE_AA)
cv2.ellipse(  img, ((440, 430), ( 25,  40), 0), (  0,   0,   0),  2, cv2.LINE_AA)
cv2.ellipse(  img, ((440, 430), ( 10,  16), 0), (  0,   0,   0), -1, cv2.LINE_AA)
cv2.ellipse(  img, ((444, 420), (  6,   6), 0), (255, 255, 255), -1, cv2.LINE_AA)
cv2.ellipse(  img, ((444, 420), (  6,   6), 0), (  0,   0,   0),  1, cv2.LINE_AA)

#linkes Auge
cv2.ellipse(  img, (360, 430), ( 12,  20), 180, 0, 180, (127, 127, 127), -1, cv2.LINE_AA)
cv2.ellipse(  img, ((360, 430), ( 25,  40), 0), (  0,   0,   0),  2, cv2.LINE_AA)
cv2.ellipse(  img, ((360, 430), ( 10,  16), 0), (  0,   0,   0), -1, cv2.LINE_AA)
cv2.ellipse(  img, ((364, 420), (  6,   6), 0), (255, 255, 255), -1, cv2.LINE_AA)
cv2.ellipse(  img, ((364, 420), (  6,   6), 0), (  0,   0,   0),  1, cv2.LINE_AA)

#Rechte Augenbrauen
pts3 = np.array([
	(420, 400),
	(430, 390),
	(440, 385),
	(450, 390),
	(460, 400),
	(470, 415),
], dtype=np.int32)
cv2.polylines(img, [pts3], False, (  0,   0,   0), 2, cv2.LINE_AA)

#Linke Augenbrauen
pts4 = np.array([
	(380, 400),
	(370, 390),
	(360, 385),
	(350, 390),
	(340, 400),
	(330, 415),
], dtype=np.int32)
cv2.polylines(img, [pts4], False, (  0,   0,   0), 2, cv2.LINE_AA)

#Rechte Wimper
pts5 = np.array([
	(425, 418),
	(430, 413),
	(440, 408),
	(450, 413),
	(455, 423),
	(460, 434),
], dtype=np.int32)
cv2.polylines(img, [pts5], False, (  0,   0,   0), 2, cv2.LINE_AA)

pts5_5 = np.array([
	(460, 434),
	(458, 437),
], dtype=np.int32)
cv2.polylines(img, [pts5_5], False, (  0,   0,   0), 1, cv2.LINE_AA)

#Linke Wimper
pts6 = np.array([
	(375, 418),
	(370, 413),
	(360, 408),
	(350, 413),
	(345, 423),
	(340, 434),
], dtype=np.int32)
cv2.polylines(img, [pts6], False, (  0,   0,   0), 2, cv2.LINE_AA)

pts6_5 = np.array([
	(340, 434),
	(342, 437),
], dtype=np.int32)
cv2.polylines(img, [pts6_5], False, (  0,   0,   0), 1, cv2.LINE_AA)

#Nase
pts7 = np.array([
	(401, 448),
	(399, 450),
	(401, 452),
], dtype=np.int32)
cv2.polylines(img, [pts7], False, (  0,   0,   0), 2, cv2.LINE_AA)

#Mund
pts8 = np.array([
	(380, 470),
	(385, 473),
	(390, 474),
	(400, 475),
	(410, 474),
	(415, 473),
	(420, 470),
], dtype=np.int32)
cv2.polylines(img, [pts8], False, (  0,   0,   0), 2, cv2.LINE_AA)

#Hals(richtig)
pts9 = np.array([
	(425, 491),
	(424, 500),
], dtype=np.int32)
cv2.polylines(img, [pts9], False, (  0,   0,   0), 2, cv2.LINE_AA)

#Hals(links)
pts10 = np.array([
	(375, 491),
	(376, 500),
], dtype=np.int32)
cv2.polylines(img, [pts10], False, (  0,   0,   0), 2, cv2.LINE_AA)

#Rechtes Ohr
pts11 = np.array([
	(475, 430),
	(480, 434),
	(478, 440),
	(475, 447),
	(467, 450),
], dtype=np.int32)
cv2.polylines(img, [pts11], False, (  0,   0,   0), 2, cv2.LINE_AA)

#Linkes Ohr
pts11 = np.array([
	(325, 430),
	(320, 434),
	(322, 440),
	(325, 447),
	(333, 450),
], dtype=np.int32)
cv2.polylines(img, [pts11], False, (  0,   0,   0), 2, cv2.LINE_AA)

#Haar(Direkt drausen)
pts12 = np.array([
	(400, 270),
	(415, 271),
	(430, 273),
	(440, 276),
	(450, 280),
	(460, 285),
	(470, 290),
	(480, 298),
	(490, 309),
	(495, 315),
	(500, 330),
	(504, 340),
	(507, 350),
	(509, 360),
	(510, 370),
	(510, 400),
	(509, 430),
	(507, 460),
	(504, 500),
], dtype=np.int32)
cv2.polylines(img, [pts12], False, (  0,   0,   0), 2, cv2.LINE_AA)

#Haar(Draußen gelassen)
pts13 = np.array([
	(400, 270),
	(385, 271),
	(370, 273),
	(360, 276),
	(350, 280),
	(340, 285),
	(330, 290),
	(320, 298),
	(310, 309),
	(305, 315),
	(300, 330),
	(296, 340),
	(293, 350),
	(291, 360),
	(290, 370),
	(290, 400),
	(291, 430),
	(293, 460),
	(296, 500),
], dtype=np.int32)
cv2.polylines(img, [pts13], False, (  0,   0,   0), 2, cv2.LINE_AA)

#Haar(Gleich drinnen)
pts16 = np.array([
	(400, 305),
	(401, 310),
	(402, 320),
	(403, 325),
	(404, 350),
	(405, 370),
	(430, 372),
	(450, 376),

	(448, 350),
	(444, 330),
	(440, 315),

	(448, 330),
	(452, 350),
	(456, 378),

	(480, 385),
	(488, 390),
], dtype=np.int32)
cv2.polylines(img, [pts16], False, (  0,   0,   0), 2, cv2.LINE_AA)

#Haar(Links drinnen)
pts17 = np.array([
	(400, 305),
	(399, 310),
	(398, 320),
	(397, 325),
	(396, 350),
	(395, 370),
	(370, 372),
	(350, 376),

	(352, 350),
	(356, 330),
	(360, 315),

	(352, 330),
	(348, 350),
	(344, 378),

	(320, 385),
	(312, 390),
], dtype=np.int32)
cv2.polylines(img, [pts17], False, (  0,   0,   0), 2, cv2.LINE_AA)

#Rechte Wange
cv2.line(img, (430, 460), (435, 455), (  0,   0,   0), 1, cv2.LINE_AA)
cv2.line(img, (434, 460), (439, 455), (  0,   0,   0), 1, cv2.LINE_AA)
cv2.line(img, (438, 460), (443, 455), (  0,   0,   0), 1, cv2.LINE_AA)
cv2.line(img, (442, 460), (447, 455), (  0,   0,   0), 1, cv2.LINE_AA)
cv2.line(img, (446, 460), (451, 455), (  0,   0,   0), 1, cv2.LINE_AA)

#Linke Wange
cv2.line(img, (350, 460), (355, 455), (  0,   0,   0), 1, cv2.LINE_AA)
cv2.line(img, (354, 460), (359, 455), (  0,   0,   0), 1, cv2.LINE_AA)
cv2.line(img, (358, 460), (363, 455), (  0,   0,   0), 1, cv2.LINE_AA)
cv2.line(img, (362, 460), (367, 455), (  0,   0,   0), 1, cv2.LINE_AA)
cv2.line(img, (366, 460), (371, 455), (  0,   0,   0), 1, cv2.LINE_AA)

cv2.imshow('Image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

4. Referenz

Zeichnen mit Python, OpenCV (Linien, Rechtecke, Kreise, Pfeile, Zeichen usw.) | note.nkmk.me [Amazon.de: Zeichnen von Moe-Charakteren: Gesicht / Körper (Manga-Technikbuch) eBook: Tatsuya Ihara, Abgerundete Ecken: Kindle Store] (https://www.amazon.co.jp/dp/B014KS0WGY)

5. Andere

In OpenCV hat die Kurve nur einen Bogen (einschließlich einer Ellipse) und es ist schwierig, eine Kurve zu zeichnen, sodass die Fortsetzung zu GIMP Python-Fu wechselt. → Zeichnen einer Illustration mit GIMP Python-Fu Teil 1 - Qiita

Recommended Posts

Zeichnen Sie eine Illustration mit Python + OpenCV
Zeichnen Sie einen Pfeil (Vektor) mit opencv / python
Binarisierung mit OpenCV / Python
So beschneiden Sie ein Bild mit Python + OpenCV
"Apple-Verarbeitung" mit OpenCV3 + Python3
Bildbearbeitung mit Python OpenCV
Kameraerfassung mit Python + OpenCV
Zeichnen Sie eine netCDF-Datei mit Python
[Python] Verwenden von OpenCV mit Python (Basic)
Gesichtserkennung mit Python + OpenCV
Verwenden von OpenCV mit Python @Mac
Schreiben Sie mit OpenCV-Python Zeichen in die Kartenillustration
Leuchtendes Leben mit Python und OpenCV
Schneiden Sie ein Bild mit Python aus
[Python] Verwenden von OpenCV mit Python (Bildfilterung)
Neuronales Netzwerk mit OpenCV 3 und Python 3
[Python] Verwenden von OpenCV mit Python (Bildtransformation)
[Python] Verwenden von OpenCV mit Python (Kantenerkennung)
Ich habe eine SMS mit Python gesendet
Einfache Python + OpenCV-Programmierung mit Canopy
Zeichnen Sie mit Python Turtle eine Koch-Kurve
Schneiden Sie das Gesicht mit Python + OpenCV aus
Gesichtserkennung mit Kamera mit opencv3 + python2.7
Laden Sie das GIF-Bild mit Python + OpenCV
Finden Sie Bildähnlichkeit mit Python + OpenCV
Zeichne Riapnov Fractal mit Python, matplotlib
Verfolgen Sie Baseballbälle mit Python + OpenCV
[Python] Mail mit Outlook senden
Graphbasierte Segmentierung mit Python + OpenCV
Zeichnen Sie Figuren mit OpenCV und PIL
Grundlegendes Studium von OpenCV mit Python
Ich habe versucht, mit Python + OpenCV eine Bildähnlichkeitsfunktion zu erstellen
Gesichtserkennung mit Python + OpenCV (invariante Rotation)
[Python] Erstellen einer Umgebung mit Anaconda [Mac]
Speichern Sie Videos Frame für Frame mit Python OpenCV
Hinweise beim Erstellen einer Umgebung mit Python
Zeichnen Sie Nozomi Sasaki in Excel mit Python
Erstellen Sie schnell eine Excel-Datei mit Python #python
Bilder mit Pupil, Python und OpenCV aufnehmen
Ich habe versucht, mit Python + opencv nicht realistisch zu rendern
Bildverarbeitung mit Python & OpenCV [Tonkurve]
Bildaufnahme von der Kamera mit Python + OpenCV
[python, openCV] base64 Gesichtserkennung in Bildern
Erstellen verschiedener Photoshop-Videos mit Python + OpenCV ③ Erstellen Sie verschiedene Photoshop-Videos
Erstellen Sie eine OpenCV3 + python3-Umgebung unter OSX
[Python] Bilder mit OpenCV lesen (für Anfänger)
[Python] Erstellen Sie schnell eine API mit Flask
Scraping von einer authentifizierten Site mit Python
Erstellen Sie eine englische Wort-App mit Python
Senden Sie eine E-Mail mit Amazon SES + Python
Treten Sie einem Online-Richter mit Python 3.x bei
Bis Sie opencv mit Python verwenden können
Leichte Bildverarbeitung mit Python x OpenCV
Lassen Sie uns mit Python 1 einen Investitionsalgorithmus entwickeln
Glättung kantengespeichert mit Python + OpenCV (BilateralFilter, NLMeansFilter)
FizzBuzz in Python3
Scraping mit Python
Statistik mit Python
Scraping mit Python