Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Schwarzanteil eines TImage ermitteln (https://www.delphipraxis.net/126656-schwarzanteil-eines-timage-ermitteln.html)

Landfloh 30. Dez 2008 09:07


Schwarzanteil eines TImage ermitteln
 
Hallo

Ich habe mal wieder ein Problem.

Ich arbeite gerade an einem Programm was zwei Bilder in einem TImage vergleicht.

Das Programm, dass ich aus diesem Forum habe, stellt die Differenz zeier Bilder dar in dem es alles was gleich ist, in schwarz Makiert. Also wenn man zwei gleiche Bilder einläd, dann stellt es ein schwarzes Bild als Differnenz dar.

Jetzt meine Frage:
Gibt es eine Möglichkeit den Schwarzanteil eines TImage zu ermitteln um die Unterschiede zu auszulesen?

Gruß,
Landfloh

Klaus01 30. Dez 2008 09:13

Re: Schwarzanteil eines TImage ermitteln
 
.. da fällt mir nichts anderes ein als die schwarzen Pixel zu zählen
und in ein Verhältnis zur gesammten Pixelanzahl zu setzen.

Grüße
Klaus

Landfloh 30. Dez 2008 09:15

Re: Schwarzanteil eines TImage ermitteln
 
Wie zählt man denn die schwarzen Pixel von einem TImage?

Klaus01 30. Dez 2008 09:21

Re: Schwarzanteil eines TImage ermitteln
 
Hallo,

das könnte im Ansatz so ausschauen:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i,j : Integer;
  blackCount: Integer;
begin
  blackCount := 0;
  for i:= 0 to image1.Picture.Bitmap.Height -1 do
    for j:=0 to image1.Picture.Bitmap.Width -1 do
     if image1.Picture.Bitmap.Canvas.Pixels[j,i] = clBlack then
       inc(blackCount);
end;
Grüße
Klaus

Landfloh 30. Dez 2008 09:35

Re: Schwarzanteil eines TImage ermitteln
 
Wenn ich das jetzt richtig verstanden habe speichert das Programm die schwarzen Pixel im Verhältniss zu allen Pixeln in der Variable blackCout.
Aber immer wenn ich versuche die Variable in ein Label zu laden bekomme ich den Wert 0heraus und das Bild verschwindet.

Klaus01 30. Dez 2008 09:37

Re: Schwarzanteil eines TImage ermitteln
 
.. die Variable heißt bei mit blackCount und nicht blackCout.

Grüße
Klaus

Noedel 30. Dez 2008 09:37

Re: Schwarzanteil eines TImage ermitteln
 
Zitat:

Zitat von Landfloh
Wenn ich das jetzt richtig verstanden habe speichert das Programm die schwarzen Pixel im Verhältniss zu allen Pixeln in der Variable blackCout.
Aber immer wenn ich versuche die Variable über IntToStr auszugeben gibt es eine Fehlermeldung. :wall:

Ich lese aus dem Code, dass er einfach nur die schwarzen Pixel zählt (ohne Verhältnis zur Gesamtpixelzahl)

Welche Fehlermeldung bekommst du denn, wenn du was machst?

Landfloh 30. Dez 2008 09:41

Re: Schwarzanteil eines TImage ermitteln
 
Sorry dass ich den Beitrag oben so spät verändert habe.
Also ich bekomme keine Fehlermeldung aber der Wert bleibt auf Null und das Bild verschwindet.

Noedel 30. Dez 2008 09:44

Re: Schwarzanteil eines TImage ermitteln
 
Wie soll denn das Bild verschwinden?
Ist es jetzt ganz weiß, schwarz oder was passiert?

Dass der Wert 0 bleibt, kann daran liegen, dass du vllt Pixel hast, die nicht exakt schwarz sind.

Klaus01 30. Dez 2008 09:48

Re: Schwarzanteil eines TImage ermitteln
 
Liste der Anhänge anzeigen (Anzahl: 1)
... also bei mir tut es..
siehe Bild im Anhang.

Grüße
Klaus

Landfloh 30. Dez 2008 09:53

Re: Schwarzanteil eines TImage ermitteln
 
Liste der Anhänge anzeigen (Anzahl: 1)
Bei mir bleibt der Wert auf Null.

Quellcode:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i,j : Integer;
  blackCount: Integer;
begin
  blackCount := 0;
  for i:= 0 to image1.Picture.Bitmap.Height -1 do
    for j:=0 to image1.Picture.Bitmap.Width -1 do
     if image1.Picture.Bitmap.Canvas.Pixels[j,i] = clBlack then
       inc(blackCount);
       Label1.Caption := '';
       Label1.Caption := (IntToStr(blackCount));
end;

Klaus01 30. Dez 2008 09:55

Re: Schwarzanteil eines TImage ermitteln
 
Liste der Anhänge anzeigen (Anzahl: 1)
.. kannst Du das Bild mal anhängen

Grüße
Klaus

Landfloh 30. Dez 2008 09:59

Re: Schwarzanteil eines TImage ermitteln
 
Zitat:

Zitat von Klaus01
.. kannst Du das Bild mal anhängen

Grüße
Klaus

Bei dem Bild was du verwendest funktioniert es.
:wiejetzt:

Landfloh 30. Dez 2008 10:03

Re: Schwarzanteil eines TImage ermitteln
 
Achso.

Das Programm ließt nur den Schwarzanteil von Bitmaps.

Danke für eure Hilfe. Es leuft jetzt. :mrgreen:

Klaus01 30. Dez 2008 10:09

Re: Schwarzanteil eines TImage ermitteln
 
.. noch als Nachschlag:

Wenn ich das jpg lade verschwindet das Bild auch bei mir.
Ich habe den Code dann so angepasst, dann klappe es auch mit jpg.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i,j : Integer;
  blackCount: Integer;
  jpg : TJpegImage;
begin
  blackCount := 0;
  jpg := TJpegImage.Create;
  jpg.LoadFromFile('d:\unbenannt.jpg');
  image1.Picture.Bitmap.Assign(jpg);
  jpg.Free;
  for i:= 0 to image1.Picture.Bitmap.Height -1 do
    for j:=0 to image1.Picture.Bitmap.Width -1 do
     if image1.Picture.Bitmap.Canvas.Pixels[j,i] = clBlack then
       inc(blackCount);

  edit1.Text:=FloatToStr(blackCount/((i+1)*(j+1)));
end;
Grüße
Klaus


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:11 Uhr.

Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf