![]() |
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:
Bekomme nur ein richtiges Ergebnis, wenn das Objekt unten-links oder oben-Links positioniert ist.
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; 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. |
Re: Objektverfolgung
Kannst du mir zwei geeignete Bilddateien zur Verfügung stellen?
Grüße vom marabu |
Re: Objektverfolgung
Liste der Anhänge anzeigen (Anzahl: 3)
Hier die gewünschten Bilder!
|
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 |
Re: Objektverfolgung
Die
![]() |
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.
|
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 |
Re: Objektverfolgung
Hallo marabu,
erstmal vielen Dank für das Programm! In meine Quellenangabe schreibe ich dann "marabu"! Zitat:
Gruß Funk |
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:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz