![]() |
AW: Bildanalyse/-vergleich
Wenn Du den Button mehrmals drücken willst musst Du Image 3 vorher wieder initialisieren wie das siehst Du im FormCreate.
Delphi-Quellcode:
If (wert > schwellwert) and (Image3.Canvas.pixels[x,y] <> clRed) then
|
AW: Bildanalyse/-vergleich
Zitat:
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:
Was hab ich falsch gemacht?
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; |
AW: Bildanalyse/-vergleich
überlappen sich bei mehrmaligem drücken und geändertem Spinedit?
Delphi-Quellcode:
wenn Du mehrmals malen willst musst Du das Bild vorher wieder schwarz füllen ...
image3.canvas.brush.color:=clblack;
image3.canvas.fillrect(rect(0,0,b,h)); |
AW: Bildanalyse/-vergleich
Ja überlappen sich bei mehrmaligen Drücken des Buttons und Änderung des Schwellwerts(spinedit1.value).
|
AW: Bildanalyse/-vergleich
Wenn Du nirgendwo die roten Dreiecke entfernst .....
initialisier doch mal Bild 3 beim Drücken von Button1 .... |
AW: Bildanalyse/-vergleich
Mit initialisieren meinst du diesen Teil hier
Zitat:
|
AW: Bildanalyse/-vergleich
genau
genau und Du hast es schon verstanden ... und wenn es bei b und h Probleme gibt einfach kurz nachdenken ... |
AW: Bildanalyse/-vergleich
Mhm, überlappen sich trotzdem.
Bei b und h gibts keine Probleme (denk ich), da global deklariert, weiß nicht ob du darauf hinaus wolltest. |
AW: Bildanalyse/-vergleich
Das Überlappen durch mehrmaliges Drücken sollte nicht mehr auftreten, Du musst allenfalls noch das Problem in den Griff bekommen wenn Du bei angenommener Schrittweite von 8 z.B. einen Punkt bei 10/10 und einen bei 15/15 hast
Du malst dann 6/6 > 14/14 und wieder bei 11/11 > 19/19 ob die Überlappung bei 11/11 > 14/14 unerwünscht ist kann ich nicht sagen, so wie ich die Definition der Aufgabe verstehe sollen nur Punkte innerhalb eines gefundenen Rechtecks ignoriert werden. |
AW: Bildanalyse/-vergleich
Liste der Anhänge anzeigen (Anzahl: 1)
Wie es im moment aussieht mit der Überlappung ist im Bild zu sehen (im Anhang).
Normalerweise dürfte er ja wegen der IF-Anweisung in keinem roten Bereich ein neues Quadrat zeichnen. Tut er aber.. Achja noch was und wie schafft man es genauso viele Punkte im Image4( Weißes Bild) wie Quadrate im Image3 zu zeichnen? Kann ich das am schnellsten mit einer IF-Anweisung machen? Was muss ich hier dann vergleichen? Dachte vielleicht an sowas wie If "soundsoviele Quadrate im Image3" Then image4.canvas.pixels[x,y]; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:52 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-2025 by Thomas Breitkreuz