![]() |
Re: Bilder vergleichen -> optimiertes verfahren gesucht!
Bei Bitmap32 gehts ohne PixelFormat (oder vergleichbares). Kann dein Problem allerdings nicht nachvollziehen, wenn man reine Bitmaps verwendet.
Ist die ursprüngliche Quelle allerdings ein JPEG z.B., dann musst du den Vergleich etwas Fehlertoleranter gestalten, da hier die Farben von der Kompression verfälscht werden. Statt bild.Canvas.pixels[x,y]<>bild2.Canvas.pixels[x,y] solltest du eine Vergleichs-Funktion basteln, z.B.:
Delphi-Quellcode:
Angewendet wird sie dann so:
// Liefert true zurück, wenn Pixel unterschiedlich.
function PixelCompare(A, B: DWORD): boolean; begin result := (Abs(RGBQuad(A).rgbBlue - RGBQuad(B).rgbBlue ) + Abs(RGBQuad(A).rgbGreen - RGBQuad(B).rgbGreen) + Abs(RGBQuad(A).rgbRed - RGBQuad(B).rgbRed ) ) > 64; end;
Delphi-Quellcode:
Diese Funktion lieferte nach ersten Tests gute Resultate, ist aber nicht "wissenschaftlich untermauert". :-)
if PixelCompare(bild.Canvas.pixels[x,y], bild2.Canvas.pixels[x,y]) then
|
Re: Bilder vergleichen -> optimiertes verfahren gesucht!
Liste der Anhänge anzeigen (Anzahl: 1)
Hi Scp!
Ich weiß auch, dass jpgs ne ungenauigkeit beim komprimieren bekommen. Hier hab ich ALLES (inkl. meiner Testbilder) mal gezippt...probierts mal aus. Es liefert oft das richtige ergebnis (genau den ausschnitt, der fehlerhaft ist) aber auch ab und zu einen zu großen oder falschen ausschnitt... Danke für den Tipp mit dem JPG, aber könntest du dir das trotzdem mal anschauen, Scp? Das wäre lieb! By the way: habe gerade deine Fehlertoleranz getestet, bei mir tritt trotzdem der selbe fehler auf, werde mir jetzt mal die farbwerte von dem als unterschiedlich erkannten pixeln ansehen... |
Re: Bilder vergleichen -> optimiertes verfahren gesucht!
Sieht doch gut aus eigentlich nur
Delphi-Quellcode:
bei r2 jeweils +1 (frag mich nicht warum) und nur der Form halber bei g32 SetSize() statt Width und Height verwenden. Außerdem fehlt immer noch try finally.
r2:= rect(x_min,y_min,x_max+1,y_max+1);
//bild3.PixelFormat := bild.PixelFormat; bild3.SetSize(x_max-x_min+1, y_max-y_min+1); // bild3.Width:=x_max-x_min+1; // bild3.height:=y_max-y_min+1; |
Re: Bilder vergleichen -> optimiertes verfahren gesucht!
Ja, danke, aber das löst ja das Problem nicht...ich habe jetzt mal nachgeschaut:
Wenn das Programm den Fehler bei mir macht, also an der stelle [x,y] zwei unterschiedliche Pixel auf bild1 und bild2 erkennt, obwohl diese gleich sind und man für die stelle[x,y] die rgb werte ausgibt, geschieht folgendes: Bild1: r:232g:219b:210(oder sonst was) Bild2: r:232g:0 b:0 Allerseits an der Stelle x=664, y=21 Es gibt auch noch andere Fälle. Da in diesem speziellen Fehlerfall der y wert der unteren grenze kleiner ist, als der der oberen Grenze, führt das ganze zu einem Fehler, da das bild3 theoretisch eine negative höhe hätte... Erklär mir mal einer, warum die pixel funktion da z.B. an der stelle 664,21 mal unterschiede erkennt, aber mal wieder nicht?! Das kann eigentlich nicht an meinem Programm liegen...vielleicht liegts an D6 in kombination mit g32, was weiß ich... Es scheint so, als ob in dem einen bild jeweils zwei farbwerte fehlen würden, tun sie aber nicht....*arg* |
Re: Bilder vergleichen -> optimiertes verfahren gesucht!
Geschieht das denn bei den beigelegten Bildern? Also, under D2005 Personal gehts immer bis jetzt.
|
Re: Bilder vergleichen -> optimiertes verfahren gesucht!
Liste der Anhänge anzeigen (Anzahl: 1)
Ja, genau bei denen! Ich kanns lad nochmal 2 beispiele hoch, wie bei mir bild3 aussieht...vielleicht sollte ich versuchen g32 neu zu installieren oder so was...
Benutze immoment folgende Version von g32: Graphics32 v1.7.1 - Build on 25-Februar-2005 |
Re: Bilder vergleichen -> optimiertes verfahren gesucht!
Vielen Dank @ scp fürs verteidigen meiner Routine!
Wenns wichtig ist das ganze würd ich mir einfach schnell den code zusammenbasteln zum auslesen eines Bitmaps und dem Auslesen der Farbwerte auf eigene Faust, ohne Kompo. Gruß Jan |
Re: Bilder vergleichen -> optimiertes verfahren gesucht!
Liste der Anhänge anzeigen (Anzahl: 1)
Anbei das geänderte und unter D2005 kompilierte Projekt. Probier erst mal nur die .exe aus, brauchst nur die 2 bmps zurück in den Ordner kopieren.
Ich verwende auch die g32 1.71 @Jan Namensvettern steht man eben zur Seite :-) |
Re: Bilder vergleichen -> optimiertes verfahren gesucht!
Danke für die ganze Mühe Scp! Es ist in der Tat wie ich vermutet habe...Deine Kompilation läuft ohne Probleme, 100 Prozentig inordnung (THX!!!), aber wenn ich das Projekt kompiliere, treten wieder die selben fehler auf. Scheinbar kann D6 nicht so gut mit gr32... i don't know...schade...mal schauen, was ich jetzt mache! :(
Danke erstmal! :hello: |
Re: Bilder vergleichen -> optimiertes verfahren gesucht!
Naja, in dem Fall ist TBitmap bei mir genauso schnell, kannst ja erstmal das wieder nehmen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:30 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