Thema: Delphi Bildanalyse/-vergleich

Einzelnen Beitrag anzeigen

Slashmob

Registriert seit: 28. Okt 2011
45 Beiträge
 
#32

AW: Bildanalyse/-vergleich

  Alt 11. Dez 2011, 21:40
Wenn Du den Button mehrmals drücken willst musst Du Image 3 vorher wieder initialisieren wie das siehst Du im FormCreate.

 If (wert > schwellwert) and (Image3.Canvas.pixels[x,y] <> clRed) then
Was genau soll ich im FormCreat sehen? Oder hab ich dich missverstanden?
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin

     b:=image1.width; h:=image1.height; // Breite und Höhe der Imagefelder
     image2.width:=b; image2.height:=h;
     image3.width:=b; image3.height:=h;
     image4.width:=b; image4.height:=h;

     image1.canvas.brush.color:=clblack; // Hintergrundfarben
     image2.canvas.brush.color:=clblack;
     image3.canvas.brush.color:=clblack;
     image4.canvas.brush.color:=clwhite;

     image1.canvas.fillrect(rect(0,0,b,h)); // Rechteck mit obigen Farben ausfüllen
     image2.canvas.fillrect(rect(0,0,b,h));
     image3.canvas.fillrect(rect(0,0,b,h));
     image4.canvas.fillrect(rect(0,0,b,h));

     image1.Picture.loadfromfile('1sw.bmp'); // Bilder hochladen
     image2.Picture.loadfromfile('pic2.bmp');

      form1.caption:= 'Bildanalyse-Suche nach Vergleichsschwankungen';
end;

Die If-Anweisung hab ich jetzt hier eingefügt, aber die roten Quadrate überlappen sich trotzdem noch:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
Var

    farbe1, // Pixelfarbe im Image1
    farbe2, // Pixelfarbe im Image2
    wert, // Differenzwert
    schwellwert, // Schwellwert zum Vergleich
    x, // Laufindex in X-Richtung
    y, // Laufindex in Y-Richtung
    z // Zähler
        :integer;

begin
     schwellwert:=spinedit1.value; // Schwellwert
     z:=0; // Zähler auf Null gesetzt

     For x:=0 to b-1 do // Pixelweise Bilder auslesen
      Begin
           For y:=0 to h-1 do
               Begin
                    farbe1 := image1.canvas.pixels[x,y]; // Farbe merken und zuweisen
                    farbe2 := image2.canvas.pixels[x,y];
                    wert:= (farbe1 and clred)-(farbe2 and clred); // Differenzwert bilden (Rotmaske)

                    If (wert > schwellwert) and (Image3.Canvas.pixels[x,y] <> clRed) then // Differenzwert mit Schwellwert vergleichen
                      begin
                       inc(z); // Zähler hochzählen
                       AddFound(z,x,y,wert); // Daten in Stringgrid einfügen
                       quadratmalen(3,y,x,spinedit2.value,clred); // Quadrat malen
                       floodfill_(x,y,clred,clblack); // Quadrat ausfüllen

                       image4.canvas.pixels[x,y]:=clred;
                       image4.canvas.pixels[x,y]; // Im Image4 die Punkte markieren
                      end;
               end;

      end;


end;
Was hab ich falsch gemacht?
  Mit Zitat antworten Zitat