Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Objektverfolgung (https://www.delphipraxis.net/63999-objektverfolgung.html)

Funk 18. Mär 2006 15:38

Re: Objektverfolgung
 
Hallo,
habe jetzt ein kleines Programm geschrieben, wo ich mein Bild in 4 Flächen aufteile und jeweils von der Fläche den mittleren Grauwert errechne. Doch ich bekomme nicht die gewünschte Werte heraus.
Delphi-Quellcode:
procedure TForm1.GrauwertClick(Sender: TObject);
var
a,b,c,d,x,y,Grauwert1,Grauwert2,Grauwert3,Grauwert4:integer;
G: PByteArray;
begin
Grauwert1:=0; Grauwert2:=0; Grauwert3:=0; Grauwert4:=0;
a:=TestImage.Picture.Bitmap.Width;
b:=TestImage.Picture.Bitmap.Height;
c:= round(TestImage.Picture.Bitmap.Width/2);
d:= round(TestImage.Picture.Bitmap.Height/2);

 for y := 0 to d  do
  begin
     G := TestImage.Picture.Bitmap.ScanLine[y];
     for x := 0 to c do
    begin
      Grauwert1:=Grauwert1+G[x];
    end;
     for x := c to a -1 do
    begin
      Grauwert2:=Grauwert2+G[x];
    end;
 end;
 for y := d to b-1 do
  begin
  G := TestImage.Picture.Bitmap.ScanLine[y];
     for x := 0 to c do
    begin
      Grauwert3:=Grauwert3 + G[x];
    end;
     for x:= c +1 to a -1 do
    begin
      Grauwert4:=Grauwert4+G[x];
    end;
 end;
  Form1.Label1.Caption:=floattostr(Grauwert1 div (d * c));
  Form1.Label2.Caption:=floattostr(Grauwert2 div (d * c));
  Form1.Label3.Caption:=floattostr(Grauwert3 div (d * c));
  Form1.Label4.Caption:=floattostr(Grauwert4 div (d * c));
end;
Bekomme nur ein richtiges Ergebnis, wenn das Objekt unten-links oder oben-Links positioniert ist.
Sobald das Objkt nach rechts verschoben wird bekomme ich falsche Werte!
Was mache ich falsch?
Meine Idee ist das ich die Veränderungen des mittleren Grauwerts der einzelnen Flächen vergleiche, und somit Auswertungen treffe.

marabu 18. Mär 2006 15:51

Re: Objektverfolgung
 
Kannst du mir zwei geeignete Bilddateien zur Verfügung stellen?

Grüße vom marabu

Funk 18. Mär 2006 23:49

Re: Objektverfolgung
 
Liste der Anhänge anzeigen (Anzahl: 3)
Hier die gewünschten Bilder!

Funk 26. Mär 2006 00:45

Re: Objektverfolgung
 
Hallo,
da ich mit ScanLine falsche Ergebnisse bekomme, habe ich das ganze jetzt mit Canvas.Pixel gemacht. Doch das ist mir etwas zu langsam. Ich beobachte schon nicht das ganze Bild, sondern einen Bereich im Zentrum.
Gibt es da eine andere Möglichkeit? Nur jeden zweiten Pixel auslesen???(immer noch zu langsam!!!)

Gruss
Funk

Ultimator 26. Mär 2006 00:49

Re: Objektverfolgung
 
Die Hier im Forum suchenGraphics32-Bibliothek sollte da auf jeden Fall Abhilfe schaffen, das ist die höchstopimierte (hochoptimierteste? am höchsten optimierte?) Graphikbibliothek, die ich kenne :)

SirThornberry 26. Mär 2006 10:14

Re: Objektverfolgung
 
Scanline sollte eigentlich keine falschen Werte zurück liefern da es ja direkt einen Pointer auf den Speicher zurück liefert. Der fehler sollte also in der Art der Verwendung von Scanline liegen. Poste einfach mal wie du mit Scanline versuchst auf das Bild zu zugreifen und vielleicht findet sich der Fehler. Ich vermute das du dich mit einer falschen Pixelgröße von Pixel zu Pixel hangelst.

marabu 26. Mär 2006 11:38

Re: Objektverfolgung
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Funk,

habe dich ein wenig aus dem Auge verloren. Im Anhang findest du eine kleine Demo, die den ersten Teil meiner Vorgehensweise aus Beitrag #10 implementiert.

Grüße vom marabu

Funk 27. Mär 2006 20:57

Re: Objektverfolgung
 
Hallo marabu,

erstmal vielen Dank für das Programm! In meine Quellenangabe schreibe ich dann "marabu"!

Zitat:

...aus dem du dann das bounding rectangle für das observierte Objekt berechnen kannst. Der Schnittpunkt der Diagonalen könnte der Zielpunkt für die Neuausrichtung des Objektivs sein
So wie ich es verstehe, das dunkelste Rechteck(in meinem Fall) wird dann ins Zentrum positioniert! Oder was hast du damit gemeint?

Gruß Funk

marabu 27. Mär 2006 21:37

Re: Objektverfolgung
 
Eine Zentralpositionierung ist eine gute Idee, wenn das "Objekt" langsam im Vergleich mit der Stellgeschwindigkeit der beiden Schrittmotoren ist. Wenn nicht, dann wird eventuell ein wenig künstliche Intelligenz gefragt sein.

Gute Nacht

marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:33 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz