[PYTHON] Ich habe ein Punktbild des Bildes von Irasutoya gemacht. (Teil 1)

Motive Wie Sie wissen, veröffentlicht Irasutoya weiterhin trendige kostenlose Materialien. Plötzlich fragte ich mich, was passieren würde, wenn diese Bilder zu Punktbildern gemacht würden, also habe ich sie erstellt.

Method Wie ich in Wizard's Forest geschrieben habe, wird gesagt, dass die Anzeigefarbe von Famicom etwa 52 beträgt. (Nicht deterministisch.) Um es wie ein Famicom aussehen zu lassen, werde ich hier versuchen, die Farbanordnung von R, G und B in 4 Teile zu reduzieren und sie anzuzeigen.

Jeder Bereich ist "0 bis 255", aber wenn Sie ihn einfach teilen, erhalten Sie "[0, 85, 170, 255]".

Alle Farbkombinationen haben ein 64er-Muster. Wenn Sie es jedoch tatsächlich als Bild ausgeben, wird es wie folgt angezeigt.

import cv2
import numpy as np

if __name__ == "__main__":
	height = 576
	width = 1024
	range_color = [0, 85, 170, 255]

	mono = np.zeros((height, width, 3), np.uint8)
	mono[:] = tuple((0,0,0))

	for r in range(4):
		for g in range(4):
			for b in range(4):
				mono[144*b:144*(b+1), 64*(r+g*4):64*(r+(g*4+1))] = tuple((85*b,85*g,85*r))

	cv2.imwrite("out.png ", mono)

out.png

Nebenbei dachte ich, dass es auf den ersten Blick keine graue Farbe gibt, aber sie wird in 2 Zeilen und 6 Spalten "(85,85,85)" und 3 Zeilen und 11 Spalten "(170,170,170)" angezeigt.

Also, wie man nach der Anzahl der ursprünglichen Farbdaten beurteilt, aber als Beispiel, wenn Sie den Wert von "110" verteilen möchten, beurteilen Sie, was näher an "85 ~ 170" liegt. Da hier "85" am nächsten ist, konvertieren Sie es in "110-> 85" und wenden Sie diesen Algorithmus auf alle Pixel an.

Develop

import cv2
import numpy as np
import sys


def resize(src):
	h,w = mat.shape[:-1]
	height = (h // 16) * 16
	width = (w // 16)* 16
	return cv2.resize(mat,(width,height))

def convertReduceColor(src):
	thresholds = [42,127,212]
	range_color = [0, 85, 170, 255]

	count = 0
	for th in thresholds:
		if src <= th:
			break
		count += 1
	return range_color[count]


if __name__ == "__main__":
	__CELL_SIZE__ = 4
	path = sys.argv[1]
	mat = cv2.imread(path,cv2.IMREAD_UNCHANGED)
	mat = resize(mat)

	height, width = mat.shape[:-1]

	for w in range(width//__CELL_SIZE__-1):
		for h in range(height//__CELL_SIZE__-1):
			c = np.mean(
						np.mean(
									mat[h*__CELL_SIZE__:(h+1)*__CELL_SIZE__, 
									w*__CELL_SIZE__:(w+1)*__CELL_SIZE__], axis=0
								), 
						axis=0
					)
			mat[
				h*__CELL_SIZE__:(h+1)*__CELL_SIZE__, 
				w*__CELL_SIZE__:(w+1)*__CELL_SIZE__
				] = tuple([convertReduceColor(c[0]), convertReduceColor(c[1]), convertReduceColor(c[2]), c[3]])

	cv2.imwrite("output.png ",mat)

np.mean(np.mean(mat[h*__CELL_SIZE__:(h+1)*__CELL_SIZE__, w*__CELL_SIZE__:(w+1)*__CELL_SIZE__], axis=0),axis=0) Hier wird der Durchschnittswert der Pixel aus der Zellengröße erhalten. Zusätzlich wird "convertReduceColor" verwendet, um eine Annäherungsbeurteilung für jedes RGB vorzunehmen.

Result

Quellbild Pixel Größe Nach der Behandlung
group_young_people.png 4 output_group.png
group_young_people.png 8 output.png
group_young_people.png 16 output.png
animal_chara_computer_penguin.png 4 output.png
animal_chara_computer_penguin.png 8 output.png
animal_chara_computer_penguin.png 16 output.png
cat_koubakozuwari_gray.png 4 output.png
cat_koubakozuwari_gray.png 8 output.png
cat_koubakozuwari_gray.png 16 output.png

――Das erfolgreichste Bild ist eine Katze mit einer Zellengröße von 16. Das rechte Ende wurde nicht bearbeitet, aber ich denke, dass es insgesamt ein Punktbild wie dieses ist. Wenn Sie das rechte Ende auch punktförmig gestalten möchten, müssen Sie die Größenänderung überdenken. ――Bei der Konvertierung in ein Punktbild ist es einfacher, erfolgreich zu sein, wenn eine Abbildung eine Person / ein Objekt enthält. ――Basial ist es ein Bild von Irasutoya, aber das Merkmal ist, dass die Abschnitte mit ungleichmäßigem Filzton gefüllt sind. Daher scheint ein Objekt nicht mit einer einzigen Farbe gefüllt zu sein und Rauschen zu enthalten.

Future ――Ich mache mir Sorgen um Rauschen, daher scheint es bei unregelmäßiger Binärisierung und Morphologieumwandlung ganz so zu sein ――Es ist die tatsächliche Famicom-Farbe, unterscheidet sich jedoch von dem diesmal verwendeten Farbschema. Daher scheint es besser, etwa 50 Farbschemata einzubetten, die mit festen Werten verwendet werden sollen, und sie durch Nachbarschaftssuche abzugleichen.

ファミコンの画面について.png

Reference

Recommended Posts

Ich habe ein Punktbild des Bildes von Irasutoya gemacht. (Teil 1)
Ich habe ein Punktbild des Bildes von Irasutoya gemacht. (Teil 2)
Ich habe eine Funktion erstellt, um das Modell von DCGAN zu überprüfen
Ich habe eine Funktion zum Trimmen des Bildes von Python openCV erstellt. Verwenden Sie sie daher bitte.
Ich habe einen schlaffen Bot gemacht, der mich über die Temperatur informiert
[Kaggle] Ich habe mit dem Titanic-Tutorial eine Sammlung von Problemen erstellt
Ich habe einen Linienbot erstellt, der das Geschlecht und das Alter einer Person anhand des Bildes errät
Ich habe einen Kalender erstellt, der den Verteilungsplan von Vtuber automatisch aktualisiert
Ich habe eine Art einfaches Bildverarbeitungswerkzeug in der Sprache Go erstellt.
Ich habe GAN mit Keras gemacht, also habe ich ein Video des Lernprozesses gemacht.
Ich habe ein Programm erstellt, um die Größe einer Datei mit Python zu überprüfen
Ich habe einen Fehler beim Abrufen der Hierarchie mit MultiIndex von Pandas gemacht
Ich habe eine Funktion erstellt, um die Bewegung eines zweidimensionalen Arrays (Python) zu sehen.
Ich habe versucht, die Trapezform des Bildes zu korrigieren
Ich habe versucht, den Bildfilter von OpenCV zu verwenden
[Python + OpenCV] Malen Sie den transparenten Teil des Bildes weiß
Ich habe ein Tool erstellt, um die Ausführungszeit von cron zu schätzen (+ PyPI-Debüt)
Ich habe einen LINE BOT erstellt, der mithilfe der Flickr-API ein Bild von Reis-Terroristen zurückgibt
Ich habe einen Appdo-Befehl erstellt, um Befehle im Kontext der App auszuführen
Ich habe ein Tool zum automatischen Sichern der Metadaten der Salesforce-Organisation erstellt
Ich habe ein Skript erstellt, das das aktive Fenster mit win32gui von Python aufzeichnet
〇✕ Ich habe ein Spiel gemacht
Schneiden Sie einen Teil der Zeichenfolge mit einem Python-Slice aus
Ich habe ein Schwellenwertänderungsfeld für Peppers Dialog erstellt
Ich habe versucht, den negativen Teil von Meros zu löschen
Ich habe einen Befehl zum Markieren des Tabellenclips gegeben
Ich habe eine Twitter-App erstellt, die die Zeichen der Vorverbindung mit Heroku entschlüsselt (Fehler).
[Python / C] Ich habe versucht, ein Gerät zu erstellen, das den Bildschirm eines PCs drahtlos aus der Ferne scrollt.
Ich habe einen Kalender erstellt, der den Verteilungsplan von Vtuber automatisch aktualisiert (Google Kalender Edition).
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Ich habe versucht, das Bild mit Python + OpenCV "gammakorrektur" zu machen
Ich habe eine Twitter-App erstellt, die das Bild eines bestimmten Charakters auf der Twitter-Timeline durch Pytorch-Transfer-Lernen identifiziert und speichert
Ich habe versucht, eine Rangliste zu erstellen, indem ich das Mitgliederteam der Organisation abgekratzt habe
Ich habe ein Tool erstellt, um die Antwortlinks von OpenAI Gym auf einmal zu erhalten
Zusammenfassung des mit einer Geschwindigkeit von einer Sekunde durchgeführten Bildcrawls
Ich habe ein VGG16-Modell mit TensorFlow gemacht (unterwegs)
Ich habe ein wenig versucht, das Verhalten der Zip-Funktion
Ich habe einen Python-Text gemacht
Verändert TensorFlow das Bild des tiefen Lernens? Was ich dachte, nachdem ich ein wenig berührt hatte
Ich habe einen Zwietrachtbot gemacht
Das Bild ist Namekuji
Ich habe ein Skript geschrieben, das das Bild in zwei Teile teilt
Was tun, wenn ein Teil des Hintergrundbilds transparent wird, wenn Sie transparente Bilder mit Pillow kombinieren?
Eine Methode zum Konvertieren des Bildstils unter Beibehaltung der Farbe
Ich habe versucht, ein Programm zu erstellen, um die Fehlersuche von Saiseriya zu lösen (Hinweis)
Finden Sie den optimalen Wert der Funktion mit einem genetischen Algorithmus (Teil 2)
[Statistik] Erfassen Sie das Bild der zentralen Polbegrenzungstheorie mit einem Diagramm
Ich habe ein Programm erstellt, das die Fehlersuche in Sekunden löst
Ich habe versucht, das SD-Boot-Image von LicheePi Nano zu erstellen
[Einführung in StyleGAN] Ich habe mit "The Life of a Man" ♬ gespielt
Ich habe viele Dateien für die RDP-Verbindung mit Python erstellt
[Los] Erstellen Sie einen CLI-Befehl, um die Erweiterung des Bildes zu ändern
Ich brachte AI dazu, über die Texte von Genshi Yonezu nachzudenken (Vorverarbeitung)
Ich habe mit Kaggle Start Book basierend auf Kaggle studiert [Teil 1]
Ich habe die Grundoperation von Pandas im Jupyter Lab geschrieben (Teil 1)
Ich brachte AI dazu, über die Texte von Genshi Yonezu nachzudenken (Implementierung)
Ich habe versucht, ein Standbild aus dem Video auszuschneiden
Ich habe versucht, ein Gerüstwerkzeug für Python Web Framework Bottle zu erstellen