Ich habe bei vorheriger Artikel eine Raspeltorte gekauft und habe bisher nur Bluetooth verwendet, aber ich habe es bemerkt. Ja, Minecraft ist auf Raspbian installiert!
Ich wollte Micra ausprobieren, also werde ich ein bisschen spielen.
Minecraft Pi Edition Ich habe eine Übersichtsseite gefunden. https://matome.naver.jp/m/odai/2142545327953860701
Die Funktionen der Pi Edition sind wie folgt.
Es scheint einen inoffiziellen Patch zu geben, der den Überlebensmodus ermöglicht. Die Größe des Flugzeugs beträgt nur 256 x 256. Wenn Sie also ernsthaft programmieren und spielen und es tun möchten, können Sie die PC-Version kaufen.
Offizielles Dokumentもプログラミングすること前提で書かれているみたい。
Die Kartenkachel, die Ihnen einfällt, wenn Sie 256 x 256 hören! (Berufskrankheit) https://en.m.wikipedia.org/wiki/Tiled_web_map
Zeichnen wir als Test eine Kartenkachel.
Ich wusste nicht, ob ich Python3 verwenden könnte, also entschied ich mich für Python2.
Lesen Sie das Bild mit OpenCV, überprüfen Sie den RGB-Wert jedes Pixels und platzieren Sie Blöcke in der Nähe dieser Farbe.
Ich konnte es installieren, indem ich die Schritte im folgenden Artikel befolgte. http://qiita.com/suppy193/items/91609e75789e9f458c39
$ sudo apt-get update
$ sudo apt-get install libopencv-dev
$ sudo apt-get install python-opencv
Mit OpenCV ist das ganz einfach.
import cv2
img = cv2.imread('image.png')
column = 10
row = 20
pixel = img[column, row]
print(pixel)
Wenn Sie die obigen Schritte ausführen, lautet die Ausgabe wie folgt. Die Reihenfolge ist BGR, nicht RGB.
>>>
[ 57 70 255]
Verwenden Sie Wolle, die in 16 Farben bemalt werden kann. Die RGB-Werte für jede Farbe sind unten aufgeführt. http://minecraft.gamepedia.com/Wool
Der Code zum Einfügen des Blocks sieht folgendermaßen aus: Bei der Ausführung wird der Block zu Füßen des Spielers orange.
from mcpi import minecraft
mc = minecraft.Minecraft.create()
x, y, z = mc.player.getPos()
wool = 35
selectedColor = 1 # Orange
mc.setBlock(x, y-1, z, wool, selectedColor)
Welche Farbe für jedes Pixel verwendet werden soll, ermitteln Sie den Unterschied in den RGB-Werten mit "numpy.linalg.norm" und verwenden Sie die Farbe mit dem geringsten Unterschied.
dist = numpy.linalg.norm(woolColor - pixel)
Der Prozess des Platzierens von Farbblöcken in der Nähe des RGB-Werts wird wiederholt und jedes Pixel des Bildes wird in Blöcke konvertiert.
Der endgültige Code ist unten.
minecraft.py
from mcpi import minecraft
import cv2
import numpy
mc = minecraft.Minecraft.create()
wool = 35
# wool color BGR
woolColors = [
[221,221,221], # 0: White
[62,125,219], # 1: Orange
[188,80,179], # 2: Magenta
[201,138,107], # 3: Light blue
[39,166,177], # 4: Yellow
[56,174,65], # 5: Lime
[153,132,208], # 6: Pink
[64,64,64], # 7: Gray
[161,161,154], # 8: Light gray
[137,110,46], # 9: Cyan
[181,61,126], # 10: Purple
[141,56,46], # 11: Blue
[31,50,79], # 12: Brown
[27,70,53], # 13: Green
[48,52,150], # 14: Red
[22,22,25] # 15:Black
]
img = cv2.imread('image.png')
img = cv2.resize(img, (256, 256))
height, width = img.shape[:2]
x, y, z = mc.player.getPos()
for column in range(width):
for row in range(height):
pixel = img[column, row]
selectedColor = 0
minDist = None
for i, woolColor in enumerate(woolColors):
dist = numpy.linalg.norm(woolColor - pixel)
if minDist == None or minDist > dist:
minDist = dist
selectedColor = i
mc.setBlock(-153+row, y-1, -116+column, wool, selectedColor)
mc.postToChat("Create Image")
Die x- und z-Koordinaten basieren auf dem Rand der Welt, aber aus irgendeinem Grund war es [-153, -116]. Die y-Koordinate ist -1 von der Position des Spielers entfernt, und die Blöcke sind in der Ebene angeordnet, auf der der Spieler steht.
Führen Sie bei laufender Minecraft Pi Edition das Python-Skript aus. Sie können dies tun, indem Sie die Taste "F5" drücken oder "Run"> "Module ausführen" drücken.
Dies nimmt viel Zeit in Anspruch, da 65.536 Pixel mit 16 Farben verglichen werden. Bitte warten Sie geduldig einige Minuten.
Für das Originalbild habe ich die Kartenkachel von OpenStreetMap (um die Shibuya Station herum) verwendet.
© OpenStreetMap contributors http://www.openstreetmap.org/copyright
Aufgrund der Kameraarbeit ist es nicht möglich, das Ganze auf einmal zu sehen. Die Form des Symbols ist deutlich sichtbar, aber die Buchstaben in der Notiz sind so weit gebrochen, dass sie gelesen werden können. Außerdem wurden Hellgrau und Hellblau zu weißen Blöcken, und die Grenzen zwischen den Gebäuden und dem Standort verschwanden, sodass das Ergebnis als Karte etwas subtil war.
Ich kann mit einfacher Logik mehr zeichnen, als ich erwartet hatte, aber ich habe den Eindruck, dass die Anzahl der Farben nicht ausreicht. Wenn Sie andere Blöcke als Wolle verwenden und die fehlenden Farben zuweisen, verbessert sich die Bildqualität, erhöht jedoch die Verarbeitungszeit, sodass dies ein Gedanke ist.
Ich habe versucht, Kartenkacheln mit einer Größe von 256 x 256 zu erstellen. Wenn das Bild jedoch in vertikaler und horizontaler Richtung die gleiche Anzahl von Pixeln aufweist, sollte die Größe vor der Verarbeitung mit OpenCV geändert werden. (Ich habe es auch in das Codebeispiel eingefügt)
Die für Twitter-Symbole verteilten Bilder sind also quadratisch und haben eine geringe Auflösung, nicht wahr?
Lass es uns angemessen lesen.
Dieser kann überhaupt besser zeichnen!
Die Tendenz, dass helle Bereiche wie Haare und Haut zu weißen Blöcken werden, ändert sich nicht. Es kann eine gute Idee sein, Blöcke hinzuzufügen, die nahe an der Hautfarbe oder braun sind (Sandstein oder gebeizter Ton).
Recommended Posts