Dessinez une illustration avec Python + OpenCV

1.Tout d'abord

J'ai écrit une illustration avec Python + OpenCV. Je ne peux pas dessiner une image parce que je n'ai pas de cœur de dessin → Je peux écrire un programme → C'est une idée imprudente que je devrais dessiner une image avec un programme. Toutes les positions des lignes sont solidement spécifiées, et je n'ai rien fait de difficile.

2. Résultat de l'exécution

20191127.PNG

3. Script entier

girl1.py


import numpy as np
import cv2

#Remplissez de blanc
img = np.full((600, 800, 3), 255, dtype=np.uint8)

#Ligne auxiliaire
#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)

#Je ne peux pas bien les remplir si je les connecte tous, alors je les divise en quatre
pts1_1 = np.array([

#cheveux(Juste à l'extérieur)
	(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),

#cou(droite)
	(424, 500),
	(425, 491),

#Contour droit(Hors oreilles)
	(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),

#cheveux(Juste à l'intérieur)À mi-chemin
	(488, 390),
	(480, 385),

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

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

#Remplissage des cheveux
pts1_2 = np.array([
#Haut de la tête
	(400, 270),

#cheveux(Juste à l'intérieur)Du milieu
	(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))

#Remplissage des cheveux
pts1_3 = np.array([
#Haut de la tête
	(400, 270),

#cheveux(Gauche à l'intérieur)À mi-chemin
#	(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))

#Remplissage des cheveux
pts1_4 = np.array([

#cheveux(Gauche à l'intérieur)Du milieu
	(352, 330),
	(348, 350),
	(344, 378),

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

#Contour gauche(Hors oreilles)
	(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),

#cou(la gauche)
	(375, 491),
	(376, 500),

#cheveux(Laissé dehors)
	(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))

#Contour
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)

#l'œil droit
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)

#oeil gauche
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)

#Sourcils droits
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)

#Sourcils gauches
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)

#Cil droit
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)

#Cil gauche
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)

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

#bouche
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)

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

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

#Oreille droite
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)

#Oreille gauche
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)

#cheveux(Juste à l'extérieur)
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)

#cheveux(Laissé dehors)
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)

#cheveux(Juste à l'intérieur)
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)

#cheveux(Gauche à l'intérieur)
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)

#Joue droite
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)

#Joue gauche
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. Référence

Dessin avec Python, OpenCV (lignes, rectangles, cercles, flèches, caractères, etc.) | note.nkmk.me [Amazon.co.jp: How to Draw Moe Characters: Face / Body (Manga Technique Book) eBook: Tatsuya Ihara, Rounded Corners: Boutique Kindle] (https://www.amazon.co.jp/dp/B014KS0WGY)

5. Autre

Dans OpenCV, la courbe n'a qu'un arc (y compris une ellipse) et il est difficile de dessiner une courbe, donc la suite se déplace vers GIMP Python-Fu. → Dessiner une illustration avec GIMP Python-Fu Partie 1 - Qiita

Recommended Posts

Dessinez une illustration avec Python + OpenCV
Dessinez une flèche (vecteur) avec opencv / python
Binarisation avec OpenCV / Python
Comment recadrer une image avec Python + OpenCV
"Traitement Apple" avec OpenCV3 + Python3
Édition d'image avec python OpenCV
Capture de caméra avec Python + OpenCV
Dessiner un fichier netCDF avec python
[Python] Utilisation d'OpenCV avec Python (basique)
Détection de visage avec Python + OpenCV
Utiliser OpenCV avec Python @Mac
Ecrire des caractères dans l'illustration de la carte avec OpenCV python
Briller la vie avec Python et OpenCV
Découpez une image avec python
[Python] Utilisation d'OpenCV avec Python (filtrage d'image)
Réseau neuronal avec OpenCV 3 et Python 3
[Python] Utilisation d'OpenCV avec Python (transformation d'image)
[Python] Utilisation d'OpenCV avec Python (détection des bords)
J'ai envoyé un SMS avec Python
Programmation facile Python + OpenCV avec Canopy
Dessinez une courbe Koch avec Python Turtle
Découpez le visage avec Python + OpenCV
Reconnaissance faciale avec caméra avec opencv3 + python2.7
Charger une image gif avec Python + OpenCV
Trouver la similitude d'image avec Python + OpenCV
Dessinez Riapnov Fractal avec Python, matplotlib
Suivre les balles de baseball avec Python + OpenCV
[Python] Envoyez des e-mails avec Outlook
Segmentation basée sur un graphique avec Python + OpenCV
Dessinez des figures avec OpenCV et PIL
Etude de base d'OpenCV avec Python
J'ai essayé de créer une fonction de similitude d'image avec Python + OpenCV
Détection de visage avec Python + OpenCV (rotation invariante)
[Python] Création d'un environnement avec Anaconda [Mac]
Enregistrer la vidéo image par image avec Python OpenCV
Remarques lors de la création d'un environnement avec python
Dessinez Nozomi Sasaki dans Excel avec python
Créez rapidement un fichier Excel avec Python #python
Capturer des images avec Pupil, python et OpenCV
J'ai essayé le rendu non réaliste avec Python + opencv
Traitement d'image avec Python et OpenCV [Tone Curve]
Acquisition d'images depuis une caméra avec Python + OpenCV
[python, openCV] base64 Reconnaissance faciale dans les images
Créez diverses vidéos Photoshop avec Python + OpenCV ③ Créez diverses vidéos Photoshop
Créer un environnement OpenCV3 + python3 sur OSX
[Python] Lire des images avec OpenCV (pour les débutants)
[Python] Créez rapidement une API avec Flask
Scraping depuis un site authentifié avec python
Créez une application de mots anglais avec python
Envoyer un e-mail avec Amazon SES + Python
Rejoignez un juge en ligne avec Python 3.x
Jusqu'à ce que vous puissiez utiliser opencv avec python
Traitement d'image léger avec Python x OpenCV
Développons un algorithme d'investissement avec Python 1
Lissage des bords enregistrés avec python + OpenCV (BilateralFilter, NLMeansFilter)
FizzBuzz en Python3
Grattage avec Python
Statistiques avec python
Grattage avec Python