AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Art Motion Tracking mit Scanlines
Thema durchsuchen
Ansicht
Themen-Optionen

Art Motion Tracking mit Scanlines

Ein Thema von NeoXan · begonnen am 17. Dez 2005 · letzter Beitrag vom 19. Dez 2005
 
NeoXan
(Gast)

n/a Beiträge
 
#1

Art Motion Tracking mit Scanlines

  Alt 17. Dez 2005, 17:29
Also...das Prinzip (eine Art Motion Tracking, wenn man so will):

#1
- Ich lese ein Bitmap ein...in diesem Bitmap befindet sich ein oder mehrere Pixel mit einer ganz bestimmten Farbe.
- Ich durchsuche das Bitmap und finde die Position des Pixels und mache in einem Zweiten zur Laufzeit erstellten Bitmap den Pixel an genau derselben Position rot oder blau...irrelevant, ich hebe ihn also hervor
- Ich lese ein weiteres(!) Bitmap ein [bmpIN] und durchsuche ebenfals, dann den gefundenen Pixel wieder auf das zweite Bitmap übertragen

#2
- Dasselbe nur dass ich keine Pixel setze, sondern immer LineTo(x,y) benutze

Vorgehensweise
Jetzt: siehe Oben
hoffentlich später:
- damit es schneller geht das Bitmap zu durchsuchen, alle Farben bis auf die eine zu eleminieren... (so dass ich z.B. nur noch S/W habe)

4 Frames Beispiele:
Video1.jpg (das Endbild bmpOUT)
- so sieht es leider aus
Video0.jpg (von diesen Bildern wird gelesen)
- hier alle 4 Bilder zusammengesetzt...jedes Bild enthält einen Pixel

421 Frames Beispiel mit LineTo:
Lines1.jpg (Endbild bmpOUT)
-So sieht es mit LineTo und Scanline aus
Lines0.jpg (Endbild bmpOUT)
-und so mit Pixels statt Scanline als Suchalgorithmus...so sollte es auch mit scanloine ausschauen

Typ:
Delphi-Quellcode:
type
  TRGB32 = packed record
    B, G, R, A: Byte;
  end;
  TRGB32Array = packed array[0..MaxInt div SizeOf(TRGB32)-1] of TRGB32;
  PRGB32Array = ^TRGB32Array;

  Line : PRGB32Array;
  BitmapIN.PixelFormat := pf32bit;
  BitmapOUT.PixelFormat := pf32bit;
Auch wenn ich versuche auf beiden Bildern dieselben Pixel anzusprechen, so erhalte ich ein eher konfuse Bild? Woran könnte das liegen? Wenn ich das ohne Scanlines mache, also mit Pixels dann dauert es natürlich um einiges länger, aber das Ergebnis ist korrekt :/
Delphi-Quellcode:
    for y := 0 to bmpIN.Height - 1 do
    begin
      Line := bmpIN.ScanLine[y];
      Line2 := bmpOUT.ScanLine[y];
      for x := 0 to bmpIN.Width - 1 do
      begin
          if (
          (Line[x].R = 0 ) AND
          (Line[x].G = 0 ) AND
          (Line[x].B In [250..255] )
          )
           then
           begin
            Line2[x].B := 255;
            Line2[x].R := 0;
            Line2[x].G := 0;
            Line2[x].A := 0;
           end;
      end;
    end;
Angehängte Grafiken
Dateityp: jpg video1_202.jpg (20,0 KB, 87x aufgerufen)
Dateityp: jpg video0_150.jpg (20,0 KB, 81x aufgerufen)
Dateityp: jpg lines1_151.jpg (32,5 KB, 79x aufgerufen)
Dateityp: jpg lines0_149.jpg (28,2 KB, 71x aufgerufen)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:50 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