Delphi-PRAXiS
Seite 2 von 5     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Bildanalyse/-vergleich (https://www.delphipraxis.net/164987-bildanalyse-vergleich.html)

Slashmob 9. Dez 2011 18:04

AW: Bildanalyse/-vergleich
 
Zitat:

Zitat von DeddyH (Beitrag 1140648)
Irgendwie passen Deine Schleifen überhaupt nicht zusammen.

Hm, das versteh ich nicht.

Hab versucht mit der ersten Schleife das erste Bild pixelweise auszulesen und mit der zweiten Schleife das zweite Bild. Liegt das vlt. daran, dass ich bei beiden die gleichen Variablen genommen hab?

DeddyH 9. Dez 2011 18:06

AW: Bildanalyse/-vergleich
 
Ich habe meinen letzten Beitrag editiert, schau noch einmal.

Bummi 9. Dez 2011 18:07

AW: Bildanalyse/-vergleich
 
DeddyH war wieder mal schneller, da ich es schon habe poste ich es trotzdem mal ...


BTW.: wenn Du es es optimieren willst steig von Pixels auf Scanline um, Beiträge hierzu liefert die Forensuche bis zum Abwinken

Die bildest im Moment die Differenz nur für das letzte Pixel Deiner Schleifen, man könnte es so lösen
Delphi-Quellcode:
var
 i,j,z:Integer;
begin
 z := 0;
 For i:=0 to image1.width - 1 do // Erstes Bild pixelweise auslesen
         Begin
              For j:=0 to image1.height -1 do
                  Begin
                       farbe1:= image1.canvas.pixels[i,j];
                       farbe2:= image2.canvas.pixels[i,j];
                       wert:= (farbe1 and clred)-(farbe2 and clred); // Differenzwert bilden
                       inc(z);
                       AddFound(z , i, j, wert);
                    end;
           end;
Zahlen müssen in Strings umgewandelt werden wenn Du sie in einem Stringgrid darstellen willst

Delphi-Quellcode:
procedure TForm1.AddFound(nr, x, y, wert :Integer);
begin
  if StringGrid1.Rowcount < (nr + 1) then StringGrid1.Rowcount := (nr + 1);
  StringGrid1.Cells[0, nr ] := IntToStr(Nr);
  StringGrid1.Cells[1, nr ] := IntToStr(x);
  StringGrid1.Cells[2, nr ] := IntToStr(y);
  StringGrid1.Cells[3, nr ] := IntToStr(wert);
end;

DeddyH 9. Dez 2011 18:09

AW: Bildanalyse/-vergleich
 
Was mir gerade erst auffällt: ist Pixels nicht 0-indiziert?

Bummi 9. Dez 2011 18:11

AW: Bildanalyse/-vergleich
 
Doch ..... ich habe die Schleife ungeprüft kopiert und angepasst ...

Slashmob 9. Dez 2011 18:59

AW: Bildanalyse/-vergleich
 
Zitat:

Zitat von DeddyH (Beitrag 1140652)
Was mir gerade erst auffällt: ist Pixels nicht 0-indiziert?

Was bedeutet das? Muss ich ggf. was ändern?


@Bummi: versuche grade deine Idee anzupassen, doch irgendwie bleibt der Differenzwert immer Null.
Muss nochmal in den Code gucken...

DeddyH 9. Dez 2011 19:01

AW: Bildanalyse/-vergleich
 
Siehe Bummis geänderten Code: die Pixel nicht von 1 bis Width/Height vergleichen, sondern von 0 bis Width/Height - 1.

Slashmob 9. Dez 2011 19:34

AW: Bildanalyse/-vergleich
 
Ich habe jetzt versucht den Code etwas anzupassen.
Ich brauch ja nur die Stellen wo es einen Unterschied der beiden Bildern mit dem Schwellwert gibt. Das heißt, es werden nicht mehr alle Pixel aufgelistet, sondern nur die, wo der (Differenz-)Wert > Schwellenwert.
Das Problem ist, dass bei der Ausgabe auf dem Stringgrid der (Differenz-)Wert immer Null ist.
Wo könnte der Fehler sein?

@Bummi und DeddyH:
An dieser Stelle mal ein Danke für eure geleistete Hilfe, Bemühungen und Tipps! :thumb:

Delphi-Quellcode:
procedure TForm1.Addfound (nr,x,y,wert:Integer);
Begin

     If stringgrid1.rowcount < (nr+1) then
        stringgrid1.rowcount:= nr+1;
       
        stringgrid1.cells[0,nr]:=inttostr(Nr);
        stringgrid1.cells[1,nr]:=inttostr(X);
        stringgrid1.cells[2,nr]:=inttostr(Y);
        stringgrid1.cells[3,nr]:=inttostr(Wert);
       
        stringgrid1.cells[0,0]:='Nr.';
        stringgrid1.cells[1,0]:='X';
        stringgrid1.cells[2,0]:='Y';
        stringgrid1.cells[3,0]:='Diff-Wert';

end;


Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
Var
    farbe1,        // Pixelfarbe im Image1
    farbe2,        // Pixelfarbe im Image2
    wert,          // Differenzwert
    schwellwert,   // Schwellwert zum Vergleich
    x,             // Laufindex
    y,             // Laufindex
    z              // Zähler
            :integer;

begin
     b:=image1.width; h:=image1.height;    // Breite und Höhe der Imagefelder
     image2.width:=b; image2.height:=h;
     
     schwellwert:=spinedit1.value;       // Voreinstellung 10

     z:=0;
     For x:=0 to b-1 do
      Begin
           For y:=0 to h-1 do
               Begin
                    farbe1 := image1.canvas.pixels[x,y];
                    farbe2 := image2.canvas.pixels[x,y];
                    wert:= (farbe1 and clred)-(farbe2 and clred);
                    If wert > schwellwert then
                    inc(z);
                    AddFound(z,x,y,wert);
               end;
      end;
end;

Slashmob 9. Dez 2011 19:44

AW: Bildanalyse/-vergleich
 
Ah jetzt steht dort keine Null mehr. *freu* :-D
Vor dem IF stand kein Begin und end?!

Delphi-Quellcode:
begin
     b:=image1.width; h:=image1.height; // Breite und Höhe der Imagefelder
     image2.width:=b; image2.height:=h;
     
     schwellwert:=spinedit1.value; // Voreinstellung 10

     z:=0;
     For x:=0 to b-1 do
      Begin
           For y:=0 to h-1 do
               Begin
                    farbe1 := image1.canvas.pixels[x,y];
                    farbe2 := image2.canvas.pixels[x,y];
                    wert:= (farbe1 and clred)-(farbe2 and clred);
                    If wert > schwellwert then
                    Begin
                      inc(z);
                      AddFound(z,x,y,wert);
                    end;
               end;
      end;
end;

Bummi 9. Dez 2011 19:51

AW: Bildanalyse/-vergleich
 
sorry, lapsus:oops:


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:43 Uhr.
Seite 2 von 5     12 34     Letzte »    

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