J'ai créé un programme pour convertir des images en art ASCII avec Python et OpenCV

introduction

L'autre jour, j'ai trouvé un site intéressant appelé ASCII Camera. picture_pc_3c309a4cbd82ecc52c545a04da630a0b.png De cette façon, il obtient l'image de la caméra du navigateur et la convertit en une chaîne de caractères ASCII.

J'ai pensé que je pouvais le faire moi-même, alors j'ai décidé de créer un programme pour convertir l'image en art ASCII.

Comment ça fonctionne

Le mécanisme est le suivant.

  1. Convertissez l'image en échelle de gris
  2. Obtenez l'intensité de couleur de chaque pixel et déterminez le texte en conséquence
  3. Cassez chaque colonne

Python et OpenCV rendent ces choses assez faciles.

Convertir en échelle de gris

Le chemin de l'image à lire doit être obtenu par saisie. Cela le convertira en échelle de gris et le gris contiendra la densité (0-255) pour chaque pixel.

import cv2

imgpath = input("Path: ")
img = cv2.imread(imgpath)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

Déterminer les caractères ASCII

Vous devez déterminer les caractères ASCII pour chaque densité de pixels (0-255), mais il n'y a pas 256 caractères ASCII réels disponibles. Je n'ai pas pu m'en empêcher, j'ai donc soigneusement sélectionné 64 caractères à utiliser et j'ai décidé de sélectionner les caractères en divisant la densité en 4 parties. Par exemple, si la densité est de 0 à 3, c'est "M", si c'est 252-255, c'est "(vide)", et ainsi de suite.

Vous trouverez ci-dessous 64 caractères classés par ordre «haute densité».

MWN$@%#&B89EGA6mK5HRkbYT43V0JL7gpaseyxznocv?jIftr1li*=-~^`':;,. 

Il était assez difficile de décider de cet ordre. L'ordre est juste décidé par l'apparence, donc c'est super approprié.

Le processus de conversion ressemble à ceci.


colorset = "MWN$@%#&B89EGA6mK5HRkbYT43V0JL7gpaseyxznocv?jIftr1li*=-~^`':;,. "

for gray2 in gray:
    output += "\n"
    for dark in gray2:
        output += colorset[dark // 4] * 2

Vous pouvez obtenir l'index du jeu de couleurs juste en divisant la densité par 4 et en la tronquant. Le rapport hauteur / largeur des caractères ASCII étant de 2: 1, les caractères à écrire sont doublés.

Achevée

Le programme terminé ressemble à ceci. Le résultat est sorti dans un fichier.

import cv2

colorset = "MWN$@%#&B89EGA6mK5HRkbYT43V0JL7gpaseyxznocv?jIftr1li*=-~^`':;,. "

imgpath = input("Path:")
img = cv2.imread(imgpath)

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
output = ""

for gray2 in gray:
    output += "\n"
    for dark in gray2:
        output += colorset[dark // 4] * 2

with open("output.txt", mode="w") as f:
    f.write(output)

J'essaierai de convertir mon icône (ceci ↓). nico.png Le résultat est ...

スクリーンショット (148).png

Comme ça. J'ai été surpris de pouvoir le convertir correctement.

Ensuite, je vais essayer une image gratuite du paysage naturel du nord de l'Angleterre reçu de M. Pakutaso converti en 300 x 200px. elly20160701265118_TP_V.jpg Le résultat est ...

スクリーンショット (146).png Ouais ... je pense que c'est une bonne réplique.

Enfin, je l'ai obtenu de Cette personne n'existe pas, un site où l'IA génère automatiquement des photos faciales. image.jpg Convertissons cette image en 250x250px et exécutons-la.

Le résultat est ...

スクリーンショット (147).png Ça fait du bien! C'est bien ... ça valait la peine ...

en conclusion

C'était donc possible avec seulement 12 lignes de code. J'ai touché OpenCV pour la première fois cette fois, mais je ne l'ai pas trouvé si pratique. Il peut être intéressant d'essayer la même chose en Unicode de 256 caractères.

Les références

Recommended Posts

J'ai créé un programme pour convertir des images en art ASCII avec Python et OpenCV
J'ai essayé de créer un programme qui convertit les nombres hexadécimaux en nombres décimaux avec python
J'ai créé un réseau pour convertir des images noir et blanc en images couleur (pix2pix)
J'ai essayé de faire LINE BOT avec Python et Heroku
Je veux exécuter et distribuer un programme qui redimensionne les images Python3 + pyinstaller
J'ai créé un package pour filtrer les séries chronologiques avec python
J'ai écrit rapidement un programme pour étudier la DI avec Python ①
J'ai fait une loterie avec Python.
Traitement d'image avec Python (j'ai essayé de le binariser en art mosaïque 0 et 1)
Convertir l'image passée à Jason Stay Samlike en Python en ASCII Art
Convertir une vidéo en noir et blanc avec ffmpeg + python + opencv
J'ai créé un démon avec Python
J'ai créé un serveur avec socket Python et ssl et j'ai essayé d'y accéder depuis le navigateur
J'ai fait un circuit simple avec Python (AND, OR, NOR, etc.)
J'ai créé une bibliothèque qui lit facilement les fichiers de configuration avec Python
Comment créer une caméra de surveillance (caméra de sécurité) avec Opencv et Python
J'ai créé un formulaire de tweet Nyanko avec Python, Flask et Heroku
J'ai essayé de faire un processus d'exécution périodique avec Selenium et Python
J'ai essayé de créer des taureaux et des vaches avec un programme shell
[Python] Essayez de reconnaître les caractères des images avec OpenCV et pyocr
J'ai fait un programme de gestion de la paie en Python!
J'ai fait un compteur de caractères avec Python
Capturer des images avec Pupil, python et OpenCV
J'ai fait une carte hexadécimale avec Python
J'ai fait un jeu rogue-like avec Python
J'ai fait un simple blackjack avec Python
J'ai créé un fichier de configuration avec Python
J'ai fait un simulateur de neurones avec Python
J'ai créé un outil pour parcourir automatiquement plusieurs sites avec Selenium (Python)
J'ai créé un outil CLI pour convertir les images de chaque répertoire en PDF
J'ai créé un script en python pour convertir des fichiers .md au format Scrapbox
J'ai créé un programme pour saisir ce que j'ai mangé et afficher les calories et les sucres
J'ai créé un outil pour convertir Jupyter py en ipynb avec VS Code
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
J'ai fait une prévision météo de type bot avec Python.
J'ai créé une application graphique avec Python + PyQt5
Convertissez des PDF en images en masse avec Python
J'ai essayé de créer un bloqueur de filles pourries sur Twitter avec Python ①
Je veux faire un jeu avec Python
[Python] J'ai créé un téléchargeur Youtube avec Tkinter.
Je veux écrire dans un fichier avec Python
J'ai créé un programme cryptographique César en Python.
J'ai fait un jeu de cueillette avec Python
Made Mattermost Bot avec Python (+ Flask)
J'ai exécuté GhostScript avec python, divisé le PDF en pages et l'ai converti en image JPEG.
J'ai essayé de faire un processus périodique avec CentOS7, Selenium, Python et Chrome
J'ai fait un module en langage C qui filtre les images chargées par Python
Une histoire à laquelle j'étais accro après la communication SFTP avec python
Introduction à la création d'IA avec Python! Partie 3 J'ai essayé de classer et de prédire les images avec un réseau de neurones convolutifs (CNN)
J'ai généré beaucoup d'images comme le favicon du calendrier Google avec Python et je l'ai incorporé dans le projet de Vue
J'ai créé un programme en Python qui lit les données FX CSV et crée un grand nombre d'images de graphiques
J'ai créé un système qui décide automatiquement de s'exécuter demain avec Python et l'ajoute à Google Agenda.
J'ai fait un Twitter BOT avec GAE (python) (avec une référence)
Je veux gérer l'optimisation avec python et cplex
J'ai créé une application de notification de nouvelles en ligne avec Python