Video Analyse

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Gerold61
Beiträge: 12
Registriert: 09.01.2010 12:05
Computerausstattung: WIN 10
PureBasic 7.52 für Windows (x64 64-bit)
Wohnort: Cuxhaven

Video Analyse

Beitrag von Gerold61 »

Ich möchte ein AVI nach definierten grafischen Merkmalen untersuchen.
Dazu muß ich Frame für Frame untersuchen.
Meine Frage: Wie kann ich mir nacheinander die Einzelbilder anzeigen lassen um dann den Bildschirminhalt auslesen und untersuchen ?
PureBasic 4.4
XP SP3
INTEL CORE QUAD
2 GB
Benutzeravatar
Dave
Beiträge: 22
Registriert: 12.06.2011 21:39
Computerausstattung: Windows 10 x64, Intel Core i7 7700k @4.2Ghz, 16GB RAM, PureBasic 5.72

Re: Video Analyse

Beitrag von Dave »

Hallo Gerold61,

Das sollte eigentlich mit der PB-Movie Library gehen.

Code: Alles auswählen

Ergebnis = MovieSeek(#Movie, Frame)
damit kann man einzeln durch alle Frames gehen, wenn das Movie pausiert ist.

Lg Dave
Benutzeravatar
dige
Beiträge: 1236
Registriert: 08.09.2004 08:53

Re: Video Analyse

Beitrag von dige »

Finde leider das Originalposting nicht mehr. War vielleicht von fr34k.
Mit Video\GetCurrentImage () kann man aus dem aktuellen Videostream
ein Snapshot ziehen.

Am besten Du suchst im englischen Forum nach den Interfaces bzw.
Strukturen des folgenden Codes:

Code: Alles auswählen

Procedure.l CatchMovieImage (MovieID, ImgID = #PB_Any)
  Protected *Movie.PB_StructureMovie, *Video.IBasicVideo, *Window.IVideoWindow
  Protected *ImageData.BITMAPINFOHEADER, DataSize, Parent, Result = -1
  
  *Movie  = IsMovie(MovieID)
  *Movie  + MovieID * SizeOf(PB_StructureMovie)
  *Window = *Movie\Window
  *Video  = *Movie\Video
  
  If *Video\GetCurrentImage(@DataSize, 0) = #S_OK
    
    *ImageData = AllocateMemory(DataSize)
    If *ImageData
      
      If *Video\GetCurrentImage(@DataSize, *ImageData) = #S_OK

         ; Ab hier die liegen die Pixel als DIB Section ab *ImageData
         ; zur Verfügung


      EndIf
      
      FreeMemory(*ImageData)
    EndIf
    
  EndIf   

  ; Bild neu zeichnen
  *Window\get_Owner(@Parent) 
  RedrawWindow_(Parent,0,0,#RDW_INVALIDATE)
  
  ProcedureReturn Result
EndProcedure
"Papa, ich laufe schneller - dann ist es nicht so weit."
Antworten