Registriert seit: 28. Okt 2011
45 Beiträge
|
AW: Bildanalyse/-vergleich
11. Dez 2011, 22: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?
|
|
Zitat
|