![]() |
Videoanalyse (ähnlich wie Lichtschranke)
Ich überlege mir, wie ich die Geschwindigkeit von Fahrzeugen auf einem Video analysieren kann.
Das Bild einer fest installierten Webcam beobachtet eine Ausfallstraße. Ändert sich am Videobild ein definierter Bereich, startet ein Sekundenzähler, bis sich ein anderer Bereich des Videobildes ändert. Anhand der Zeit (im Sekundenbereich) und der Strecke, die zwischen den Bildpunkten in der Natur liegt, sollte sich die Geschwindigkeit ermitteln lassen. (nur annähern, wenn wenige Autos fahren, nicht gerichtsverwertbar, bei guter Beleuchtung, wenn das Auto nicht asphaltgrau ist, .....) Was mir fehlt, ist eine Idee, wie ich im Millisekundenbereich einzelne oder wenige Pixel des Videobildes auf Helligkeits- /Farbschwankungen untersuchen kann. Hat jemand einen Ansatz? |
AW: Videoanalyse (ähnlich wie Lichtschranke)
Die grundlegendste Antwort wäre hier wohl
Delphi-Quellcode:
. Das liefert dir einen Zeiger auf eine Bildzeile, wovon jeder Block (abhängig vom Pixelformat) die RGB- bzw. RGBA-Werte enthält.
TBitmap.ScanLine
|
AW: Videoanalyse (ähnlich wie Lichtschranke)
Wenn die Straße gerade genug (waagerecht) auf dem Bild ausgerichtet ist, würde es ja sogar schon reichen eine einzelne Zeile zu betrachten. Das mittels Scanline ist problemlos im Millisekundenbereich abgefrühstückt.
|
AW: Videoanalyse (ähnlich wie Lichtschranke)
Wenn die Bildfrequenz 50Hz ist, muss man nur alle 20 msec eine Analyse durchführen.
|
AW: Videoanalyse (ähnlich wie Lichtschranke)
Zitat:
50 Hz sind 50 Bilder pro Sekunde, man muss also all 20 Millisekunden eine Bildanalyse durchfuehren. |
AW: Videoanalyse (ähnlich wie Lichtschranke)
Da war ein m verlorengegangen.
Übrigens: Bei Dir ist ein e verlorengegangen. |
AW: Videoanalyse (ähnlich wie Lichtschranke)
Danke für den Hinweis.
Erste Versuche habe ich jetzt schon gemacht. Bildvergleich mit Scanline gibt gute Ergebnisse. Danke für den Tipp. Meine Überlegung war weiterhin, einen kleinen Ausschnitt (30*30 Pixel) vom Desktop in die Anwendung zu kopieren und dort mit dem hinterlegten Bild des Ausschnitts ohne Auto zu vergleichen. Ich habe mich aus Faulheit für den Desktop entschieden. Dann muss ich mich nicht mit irgend welchen Videosstreams in Delphi rumschlagen, sondern lasse den Stream im Browser anzeigen und kopiere es von dort in die Delphianwendung. Verschieben, darf man dann das Browserfenster natürlich nicht mehr. Bedient habe ich mich bei diesen Codezeilen _______________________________________ function GetScreenShot: TBitmap; var Desktop: HDC; begin Result := TBitmap.Create; Desktop := GetDC(0); try try Result.PixelFormat := pf32bit; Result.Width := Screen.Width; Result.Height := Screen.Height; BitBlt(Result.Canvas.Handle, 0, 0, Result.Width, Result.Height, Desktop, 0, 0, SRCCOPY); Result.Modified := True; finally ReleaseDC(0, Desktop); end; except Result.Free; Result := nil; end; end; procedure TForm1.Button1Click(Sender: TObject); begin Image1.Picture.Bitmap := GetScreenShot; end; _______________________________ Leider scheint die Prozedur denn Speicher nicht ordentlich aufzuräumen, denn nach einigen Sekunden (Scannrate 100ms) gehen mir die Ressourcen aus. Die Probleme tauchen immer dort auf, wo man sie nicht vermutet :snowball: Ich muss vielleicht noch etwas mit FreeAndNil arbeiten. Das werde ich morgen testen. |
AW: Videoanalyse (ähnlich wie Lichtschranke)
|
AW: Videoanalyse (ähnlich wie Lichtschranke)
Zitat:
Code:
procedure TForm1.Button1Click(Sender: TObject);
var bmp: TBitmap; begin bmp := GetScreenShot; if Assigned(bmp) then begin try Image1.Picture.Bitmap.Assign(bmp); finally bmp.Free; end; end; end; |
AW: Videoanalyse (ähnlich wie Lichtschranke)
Danke Medium.
Du hast meinen Sonntag gerettet.:cheer: Das Aufräumen mit deinen Code funktioniert hervorragend. Der Rest ist jetzt noch die übliche Fleißarbeit (hoffe und befürchte ich). Beim nächsten unvorhergesehenen Problem melde ich mich ;-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:38 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