Einzelnen Beitrag anzeigen

Pixel

Registriert seit: 23. Aug 2016
26 Beiträge
 
#1

Pixelerkennung, Kreativität gesucht die mir fehlt!

  Alt 23. Aug 2016, 20:12
Hallo erstmal,

bin hier neu (wie man sieht)!

Ich stelle schon mal gleich klar: Ich hab mich mit dem folgenden Problem c.a. 1 Woche auseinandergesetzt und nichts gutes auf die Beine gestellt. Es mangelt mir eindeutig an kognitiven Fähigkeiten und Ihr habt nun die Mission das zu kompensieren (weil Ihr so nett seid).

Kurz: Es geht darum in den folgenden Bildern via Pixelerkennung den Kopf zu finden. Bevor ich darauf eingehe was ich bisher getan habe könnt Ihr euch selbst ein Bild davon machen wie das ganze aussieht. Achtet bei den Bildern auf die Roten Linien die die Objekte umrunden. Bilder im Anhang.

Momentan funktioniert meine Pixelerkennung nur bei 1D). Die HP-bar hat einen immer gleichen Rot-ton:

Rot : >= $FA
Grün: = $00
Blau: = $13

Also der Screenshot der bei 1D zusehen ist wird dann mit folgendem Code durchlaufen:

Delphi-Quellcode:
procedure findPixelPosition;
var
  x,y : Integer;
  Pixels2 : PRGBTripleArray;
begin
  found := false;
  for y := 0 to screenshot.Height-10 do
  begin
    Pixels := screenshot.ScanLine[y];

    for x := 0 to screenshot.Width-10 do
    begin
      if (Pixels[x].rgbtBlue = $13) and (Pixels[x].rgbtGreen = $00) and (Pixels[x].rgbtRed >= $FA) then
      begin
        Pixels2 := screenshot.ScanLine[y+1];
        if (Pixels2[x].rgbtBlue = $13) and (Pixels[x].rgbtGreen = $00) and (Pixels[x].rgbtRed >= $FA) then
        begin
          Pixels2 := screenshot.ScanLine[y+2];
          if (Pixels2[x].rgbtBlue = $13) and (Pixels[x].rgbtGreen = $00) and (Pixels[x].rgbtRed >= $FA) then
          begin
            found := true;
            AimPixelX := ScanL + x;
            AimPixelY := ScanT + y;
            Exit;
          end;
        end;
      end;
    end;
  end;
end;
Also, wenn 3 untereinanderfolgende Pixel diese Farbe haben, dann ist die linke Seite der HP-bar gefunden, denn wir fangen ja an von Links nach Rechts zu suchen.

Bei einer Entfernung von 2-8 Meter kann man das statische Offset HP_Bar_Links_X + 41 und HP_Bar_Links_Y + 63 verwenden um vom gefunden Pixel ca zur Mitte des Kopfes zu gelangen.

Problem: Bei größerer Entfernung ist das Offset falsch. Die Objekte sowohl auch die HP-Bar skalieren. Demnach wird aus Offset HP_Bar_Links_X + 41 und HP_Bar_Links_Y + 63 bei einer Entfernung von 30 Metern z.B. Offset HP_Bar_Links_X + 30 und HP_Bar_Links_Y + 43

Ich habe keine Möglichkeit gefunden herauszufinden wie weit ich von einem Objekt entfernt bin, demnach wollte ich von der HP-Bar erkennung mich lösen und anstelle dessen den Kopf irgendwie anders erkennen. Ich habe mal bei 1A, 1B und 1C paar Objekte screenshotted und mit verschiedenem Hintergrund.

Ich müsste die Breite der HP-Bar (die auch mit der Distanz sich verändert) feststellen können und davon die Mitte nehmen um zumindest mal die X-Achse zu erhalten.

Dann könnte ich Y-Achse nach dem nächsten Rot-Pixel durchsuchen (unterhalb des Namens).

Aber die HP-bar hat nicht immer die gleiche Farbe und wird ja auch durchsichtig wenn die HP verloren gehen...


Ich hoffe die Problemstellung ist klar genug dass man sich darüber Gedanken machen kann.


Danke im voraus!
Miniaturansicht angehängter Grafiken
1a.png   a2.png   a3.png   a4.png  

Geändert von Pixel (23. Aug 2016 um 22:30 Uhr)
  Mit Zitat antworten Zitat