![]() |
Bewegungsmelder Webcam DsPack FilterGraph
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo DelphiPraxler,
zwei Tage lang hab ich ausgiebig recherchiert, nun konnte ich die ersten Erfolge erzielen: Die Grundfunktionen eines Bewegungsmelders sind niedergeschrieben. Doch, ach, weitere Probleme sind in Sicht.:cry: Der Treiber meiner beiden Webcams – einmal ![]() Der komplette Quellcode wäre meines Erachtens zu lang für die Darstellung im Forum, deshalb hab ich ihn auf einer meiner Homepages plaziert: ![]() Zum Ausprobieren in der eigenen IDE sind die ![]() ![]() Vielleicht bekommt ein Interessierter heraus, wo die Schutzverletzung ausgelöst wird, mir ist das bislang nicht gelungen. Code zum Bildvergleich:
Delphi-Quellcode:
{******************************************************************************************************************
*** BILDVERGLEICH 2 TRUE bedeutet BILDER SIND GLEICH (CompareImagesShmia) *** ******************************************************************************************************************} FUNCTION TFormCapture.Bildvergleich2(Bild1, Bild2 : TBitmap): Boolean; CONST Mask : Cardinal = $FFFFFFFF; VAR Maske : Cardinal; Fehler, x, y : Integer; P1, P2 : PByte; BEGIN Fehler := 0; Maske := Mask DIV Track_Color.Max * Track_Color.Position; Label_Maske.Caption := IntToStr(Maske); Bild1 := GreyBitmap(Bild1); Bild2 := GreyBitmap(Bild2); Bild1.PixelFormat := pf24bit; Bild2.PixelFormat := pf24bit; FOR y := 0 to Bild1.Height -1 DO BEGIN P1 := Bild1.ScanLine[y]; P2 := Bild2.ScanLine[y]; FOR x := Bild1.Width-1 DownTo 0 DO BEGIN IF (PInteger(P1)^ AND Maske) <> (PInteger(P2)^ AND Maske) THEN INC(Fehler); INC(P1, 3); INC(P2, 3); Application.ProcessMessages; END; END; IF Fehler > (UpDown_Sensi.Position * 10) THEN Result := FALSE ELSE Result := TRUE; END; |
AW: Bewegungsmelder Webcam DsPack FilterGraph
Zitat:
Und wenn das wirklich mal nichts hilft, dann hilft Logging (an wichtigen Stellen wird geloggt und nach der letzten und dem nächsten Logeintrag liegt der Fehler) Wozu ist eigentlich das bremsende und völlig unnötige
Delphi-Quellcode:
?
Application.ProcessMessages;
Sicher daß ein Nummerischer/mathematischer Wert sich gut eignet, für einen binären Vergleich?
Delphi-Quellcode:
Das Rechenergebnis ist garantiert meistens nicht geeignet für sowas.
Maske := Mask DIV Track_Color.Max * Track_Color.Position;
Und warum schreibst du in einer Konstante rum? Auch wenn es nicht unbedingt falsch ist, aber IF erwartet einen Booleanischen Wert und dein Result ebenso ... warum nicht kombinieren?
Delphi-Quellcode:
IF Fehler > (UpDown_Sensi.Position * 10) THEN
Result := FALSE ELSE Result := TRUE;
Delphi-Quellcode:
Result := Fehler <= UpDown_Sensi.Position * 10;
|
AW: Bewegungsmelder Webcam DsPack FilterGraph
Zitat:
|
AW: Bewegungsmelder Webcam DsPack FilterGraph
Bei diesem Englischdeutschmischmasch darf man sich doch mal verlesen. :oops:
|
AW: Bewegungsmelder Webcam DsPack FilterGraph
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
So, jetzt mach ich mich ans Logfile ... diese Idee wäre mir wohl nicht so schnell von alleine gekommen, danke. |
AW: Bewegungsmelder Webcam DsPack FilterGraph
Zitat:
:cheers: |
AW: Bewegungsmelder Webcam DsPack FilterGraph
Was mach GreyBitmap denn eigentlich?
|
AW: Bewegungsmelder Webcam DsPack FilterGraph
So aus dem blauen Nebel:
if (Bild1.Height<>Bild2.Height) or das gleiche in der Breite sind sie verschieden. |
AW: Bewegungsmelder Webcam DsPack FilterGraph
Zitat:
Wegen der "Genauigkeit" ... es kommt nicht auf die Genauigkeit drauf an, sondern auf die binäre darstrellung der Werte. Bei soeiner mathematich unstabilen Rechnung kommen die wildestens Bitkombinationen raus, was dann zu anderen Ergebnissen führt, was du eventuell erwartest.
Delphi-Quellcode:
P1^ = 29 aka b00011101
P2^ = 76 aka b01001100 Maske = 44 aka b00101100 = beide Werte gleich Maske = 156 aka b10011100 = P1 größer als P2 Maske = 255 aka b11111111 = P2 größer als P1 Und bei den Integerzugriffen mußt du beachten, daß du mit 4 Byte zugreifst, aber deine Pixel nur 3 Bits (pf24) groß sind und du somit meistens ein Byte eines anderen Pixels mit einrechnen könntest. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:47 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