AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Zwei Bitmaps miteinander vergleichen
Thema durchsuchen
Ansicht
Themen-Optionen

Zwei Bitmaps miteinander vergleichen

Ein Thema von webby · begonnen am 21. Aug 2002 · letzter Beitrag vom 21. Aug 2002
Antwort Antwort
webby
(Gast)

n/a Beiträge
 
#1

Zwei Bitmaps miteinander vergleichen

  Alt 21. Aug 2002, 10:09
Hallo,
Ich bräuche eine Funktion die zwei Bitmaps miteinander vergleicht (mit Toleranzwert, die Bilder stammen von einer Cam) und dann zurückgibt wieviele Pixel sich unterscheiden (oder noch besser wäre wieviel Prozent).
Bisher hätte ich es so versucht, dass ich alle Pixel einzeln vergleich mit Bitmap.Canvas.Pixels[x, y], aber wie sich erraten lässt dauert dass viel zu lange...

Ich hoffe ihr könnt mir helfen.
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2
  Alt 21. Aug 2002, 10:37
Da kannst das TBitmap.ScanLine[] Array einsetzen. Es ist jedoch abhängig von der verwendeten Farbtiefe des Bitmaps. Bei 24Bit ergeben immer 3 Bytes ein Pixel. Du solltest also vor dem Einsatz von ScanLine die TBitmap.PixelFormat-Eigenschaft setzen (z.B. auf pf24bit).

Und die Prozentangabe ist doch gar kein Problem. Du ermittelst, wieviele Pixel sich unterscheiden, multiplizierst es mit 100 und dividierst das ganze dann durch die Gesamtanzahl alle Pixel.

Prozent := (Ermittelt * 100) div (Width * Heigth);
  Mit Zitat antworten Zitat
webby
(Gast)

n/a Beiträge
 
#3
  Alt 21. Aug 2002, 10:54
Danke!
Ich werde es gleich einmal versuchen!
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#4
  Alt 21. Aug 2002, 11:26
habe hier noch etwas gefunden. Paßt vielleicht nicht ganz hier hin, aber die Funktion habe ich einmal verwendet, um Records miteinander zu vergleichen. Allerdings liefert sie nur eine Aussage, ob zwei Records (oder Bilder) gleich sind oder nicht. Das mit den Pixeln verstehe ich sowieso nicht, von Hand wirst du kaum 2mal identische Bilder machen. Selbst wenn du keinen Unterschied siehst. Jedes Programm würde dir sagen die Bilder seien zu 100 % nicht identisch, da eine Verschiebung oder Drehung um 1 Pixel schon genügt, damit kein pixel mehr deckungsgleich ist. Ausnahme Deckel auf Kamera. haha.

Code:
Function Comp_Stru ( Var s1, s2; groesse : word ) : boolean;
  Var
    a1 : Array [1..$FFFF] Of Byte Absolute s1;
    a2 : Array [1..$FFFF] Of Byte Absolute s2;
    i : Integer;
    c : integer;
  Begin
    c := 0;
    For i := 1 To groesse Do Begin
      If a1[i]<a2[i] Then Begin
        c := -1;
      End;
      If a1 [i] > a2 [i] Then Begin
        c := 1;
      End;
      Comp_Stru := c <> 0;
    End;
  End;
Für den, meines Erachtens, einzigen Zweck, nämlich bereits vorhandene (auf PC !) Bilder zu ermitteln, müßte die Funktion (entsprechend angepaßt) funktionieren. Schnell ist sie auch. Aufzurufen wäre sie dann so:

Code:
...
VAR bild1,bild2 : Bildtyp;
    gleich     : boolean;
...

gleich := comp_stru (bild1,bild2,sizeof (bildtyp) = 0;
Gruß

Hansa


Code-Tags eingefügt. Mfg. Daniel
  Mit Zitat antworten Zitat
webby
(Gast)

n/a Beiträge
 
#5
  Alt 21. Aug 2002, 17:30
Danke Hansa, aber das mit ScanLine funktioniert schon super!
Die Komplette Routine braucht jetzt nur noch ca. 120 ms (von vorher 4 s).

Und mir geht es ja gar nicht, ob jetzt das Bild verschoben worden ist oder nicht. Ich brauch ja nur den vergleich von zwei Bildern ob sich was bewegt hat. Den Tolleranzwert brauchte ich deshalb, weil ja meine Cam ganz schön flimmert...
  Mit Zitat antworten Zitat
Antwort Antwort


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 19:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz