![]() |
Übereinstimmung von Bildern
Hi,
ich will ein Programm schreiben das überprüft zu wie viel Prozent zwei geöffnete Bilder übereinstimmen. Als erstes hatte ich die Menthode den Farbcode zufällig ausgewählter Pixel in den Bildern zu vergelichen. Das hat funktioniert, war aber nicht sicher. Also habe ich nach einer Möglichkeit gesucht mit der man alle Pixel miteinander vergleicht. Aber ich kriege es einfach nicht gebacken. :cry: Mit diesen Code habe ich ein bisschen rumexpierentirt
Delphi-Quellcode:
Danke im Voraus für die Hilfe
var
X, Y, A: Integer; P0,P1: PByteArray; P_Color: integer; begin P_Color:=0; for Y := 0 to IMG_1.Height-110 do begin P0 := IMG_1.Picture.Bitmap.ScanLine[Y]; P1 := IMG_2.Picture.Bitmap.ScanLine[Y]; for X := 0 to IMG_1.Width-1 do begin if IntToStr(P0[X]) = IntToStr(P1[x]) then begin P_Color:=P_Color+1 end; end; end; //Anzahl der Pixel bestimmen A:=Y*X; //Prozent der Übereinstimmung errechnen und ausgeben MainForm.Caption:=FloatToStrF(100/A*P_Color,ffNumber,100,2); end; :cheers: |
Re: Übereinstimmung von Bildern
Könnte man nicht auch die Bilder mit:
Delphi-Quellcode:
ein Differenzbild erzeugen und dann alle Pixel zählen die nicht 0 sind.
Image3 := Image1 XOR Image2
Korrigier mich bitte jemand, falls ich mich total irre... ^^ |
Re: Übereinstimmung von Bildern
Ich glaube ich habe die Lösung gefunden. Ich habe den Code neu geschrieben und die Sache mal ander angepackt :-D
Delphi-Quellcode:
Ihr könnt ja mal einige Testdurchläufe machen, und gucken ob die ergebnisse stimmen könnten :wink:
var
hi,wi,p,n,a:integer; cc_1,cc_2: string; begin p:=0; n:=0; for hi:=1 to IMG_1.Height do for wi:=1 to IMG_1.Width do begin try cc_1:=IntToStr(ColorToRGB(IMG_1.Canvas.Pixels[wi,hi])); cc_2:=IntToStr(ColorToRGB(IMG_2.Canvas.Pixels[wi,hi])); if cc_1=cc_2 then p:=p+1; except n:=n+1; end; end; a:=IMG_1.Height*IMG_1.Width; MainForm.Caption:=FloatToStrF(100/a*p,ffNumber,100,4)+'% Übereinstimmung'; end; [edit] Auf dieser art dauert das bei großen Bildern aber ganzschön lange :shock: [/edit] |
Re: Übereinstimmung von Bildern
warum wandelst du die beiden Farbwerte erst zu einem String und vergleichst die Strings? Warum vergleichst du nicht die beiden Farbwerte?
|
Re: Übereinstimmung von Bildern
wie kann man genau das aber nun mit jpg oder gif bildern tun?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:47 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 by Thomas Breitkreuz