Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Übereinstimmung von Bildern (https://www.delphipraxis.net/64359-uebereinstimmung-von-bildern.html)

robinWie 2. Mär 2006 16:20


Übereinstimmung von Bildern
 
Hi,
ich will ein Programm schreiben das überprüft zu wie viel Prozent zwei geöffnete Bilder übereinstimmen. Als erstes hatte ich die Menthode den Farbcode zufällig ausgewählter Pixel in den Bildern zu vergelichen. Das hat funktioniert, war aber nicht sicher. Also habe ich nach einer Möglichkeit gesucht mit der man alle Pixel miteinander vergleicht. Aber ich kriege es einfach nicht gebacken. :cry: Mit diesen Code habe ich ein bisschen rumexpierentirt

Delphi-Quellcode:
var
  X, Y, A: Integer;
  P0,P1: PByteArray;
  P_Color: integer;
begin
  P_Color:=0;
  for Y := 0 to IMG_1.Height-110 do begin
     P0 := IMG_1.Picture.Bitmap.ScanLine[Y];
     P1 := IMG_2.Picture.Bitmap.ScanLine[Y];
     for X := 0 to IMG_1.Width-1 do begin
      if IntToStr(P0[X]) = IntToStr(P1[x]) then
        begin P_Color:=P_Color+1 end;
     end;
  end;
  //Anzahl der Pixel bestimmen
  A:=Y*X;
  //Prozent der Übereinstimmung errechnen und ausgeben
  MainForm.Caption:=FloatToStrF(100/A*P_Color,ffNumber,100,2);
end;
Danke im Voraus für die Hilfe
:cheers:

Duke_2004 2. Mär 2006 16:25

Re: Übereinstimmung von Bildern
 
Könnte man nicht auch die Bilder mit:

Delphi-Quellcode:
Image3 := Image1 XOR Image2
ein Differenzbild erzeugen und dann alle Pixel zählen die nicht 0 sind.

Korrigier mich bitte jemand, falls ich mich total irre... ^^

robinWie 2. Mär 2006 16:33

Re: Übereinstimmung von Bildern
 
Ich glaube ich habe die Lösung gefunden. Ich habe den Code neu geschrieben und die Sache mal ander angepackt :-D

Delphi-Quellcode:
var
  hi,wi,p,n,a:integer;
  cc_1,cc_2: string;
begin
  p:=0; n:=0;
  for hi:=1 to IMG_1.Height do
    for wi:=1 to IMG_1.Width do
     begin
        try
         cc_1:=IntToStr(ColorToRGB(IMG_1.Canvas.Pixels[wi,hi]));
         cc_2:=IntToStr(ColorToRGB(IMG_2.Canvas.Pixels[wi,hi]));
         if cc_1=cc_2 then p:=p+1;
        except
          n:=n+1;
        end;
     end;
  a:=IMG_1.Height*IMG_1.Width;
  MainForm.Caption:=FloatToStrF(100/a*p,ffNumber,100,4)+'% Übereinstimmung';
end;
Ihr könnt ja mal einige Testdurchläufe machen, und gucken ob die ergebnisse stimmen könnten :wink:

[edit] Auf dieser art dauert das bei großen Bildern aber ganzschön lange :shock: [/edit]

SirThornberry 2. Mär 2006 16:36

Re: Übereinstimmung von Bildern
 
warum wandelst du die beiden Farbwerte erst zu einem String und vergleichst die Strings? Warum vergleichst du nicht die beiden Farbwerte?

wb32 21. Mär 2008 12:26

Re: Übereinstimmung von Bildern
 
wie kann man genau das aber nun mit jpg oder gif bildern tun?


Alle Zeitangaben in WEZ +1. Es ist jetzt 02: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 by Thomas Breitkreuz