Ich hab mich gestern abend nochmal damit auseinander gesetzt.
Bei der C/C++ Variante, ist es wohl wirklich effizienter, nich alle 1 024 000 Pixel in ein neues grosses array zu packen, sondern mit einer Funktion ?!? die Bytes aus dem Vector mit dem Byte aus dem anderen Vector zu vergleichen. Damit muss kein riesen Array vergehalten werden. Und das ganze casten per sstringstream oder sprintf entfaellt. Immerhin war die Datei imdem das gesamte Array gespeichert wurde fast 25MB gross, das bedeudet doch auch 25MB Arbeitspeicher?!?
In Python fand ich keine Funktion in der PIL,sondern nur diese getdata Funktion. Opencv ist leider schlecht dokumentiert. Wie ist es denn in Python? Liefert getdata evtl. auch nur reine Bytes?
Wir wollen ja Vergleiche, indem beide Programme das identische verarbeiten.
Aber im Ansatz sollte man versuchen, keine aufgeblasenen Daten auf einmal in ein Programm zu verarbeiten, sondern zugunsten der Effizenz und des Speichers, diese Daten nur bei Bedarf zu erzeugen bzw. zu vergleichen.
Immerhin wurde die Arbeistspeichernutzung rund 60MB gross, was einfach etwas viel ist.
Das heisst ich muesste ja auch ein bytearray in python erstellen, um das ganze Overhead zu vermeiden.
Egal wie das jetzt endet, ich hab dieses simple Bild in Bild suchen und Bild "menschlich lesbar" kraeftig unterschaetzt. Dieses Array erstellen, kann numpy mit reshape als Befehl.
Aber ein Nachteil hat Python jetzt wirklich, der Programmierer muss sich viel mehr im klaren sein, was er an Datentypen braucht, und welche schnell zu verarbeiten sind.
Was ich recht interessant fand, war diese Seite.
https://waymoot.org/home/python_string/ . Was in mein Fall ja bedeuten wuerden, das es sinnvoller waere, das mein "0000001 000:255:128:255" schneller zu verarbeiten waere, wenn ich alle Werte per Liste erfasse und dann per join in an den String haenge.
Es fehlt halt das kluge Koepfchen, der Compiler, der Codeoptimierungen vornimmt. Bei Python muss der Entwickler mehr beruecksichtigen.