Ich versuche eine effiziente Möglichkeit zu finden, von einem Tupel (wo alle 4 Einträge R, G, B, Alpha eines Pixels entsprechen) zu einem NumPy-Array zu konvertieren (zur Verwendung in OpenCV).NumPy - Effiziente Konvertierung von Tupel zu Array?
Genauer gesagt, ich benutze pywin32, um die Client-Bereich Bitmap eines Fensters zu erhalten. Dies wird in Form eines Tupels zurückgegeben, wobei die ersten vier Elemente zu den RGB-Alpha-Kanälen des ersten Pixels gehören, dann die nächsten vier des zweiten Pixels und so weiter. Das Tupel selbst enthält nur die ganzzahligen Daten (d. H. Es enthält keine Dimensionalität, obwohl ich diese Information habe). Aus diesem Tupel möchte ich ein NumPy 3D-Array erstellen (Breite x Höhe x Kanal). Momentan erstelle ich einfach ein Array von Nullen, gehe dann durch jeden Eintrag im Tupel und platziere ihn im NumPy-Array. Ich mache das mit dem unten stehenden Code. Und ich hoffe, dass es einen wesentlich effizienteren Weg gibt, an den ich gerade nicht denke. Irgendwelche Vorschläge? Vielen Dank!
Code:
bitmapBits = dataBitmap.GetBitmapBits(False) #Gets the tuple.
clientImage = numpy.zeros((height, width, 4), numpy.uint8)
iter_channel = 0
iter_x = 0
iter_y = 0
for bit in bitmapBits:
clientImage[iter_y, iter_x, iter_channel] = bit
iter_channel += 1
if iter_channel == 4:
iter_channel = 0
iter_x += 1
if iter_x == width:
iter_x = 0
iter_y += 1
if iter_y == height:
iter_y = 0
Dies ist in der Tat etwas schneller (für meine aktuelle Verwendung ist es etwa 10% schneller als die von Bill vorgeschlagene Lösung). – golmschenk