Bild im Bild - Positions finden
-
Hallo,
ich mache mir gerade Gedanken darüber, wie ich ein Bild in einem anderen Bild finden kann. Ich habe also die beiden Bilder in IPicture Variablen geladen und auf zwei CDC kopiert, um nun die eizelnen Farbwerte der Pixel vergleichen zu können.Theoretisch lässt sich das Problem natürlich dadurch lösen, dass ich über mehrere geschachtelte Schleifen, alle Koordinaten durchlaufe und die Farbwerte vergleiche, allerdings wird das mega zeitintensiv.
Geht es irgendwie schneller?
Noch dazu: Die Bild sind deutlich größer, als die Bildschirmauflösung. Ich würde also am liebsten auf direkt mit den IPicture's arbeiten und mir den Umweg über die CDCs sparen.Grüße,
Michael
-
Ich denke es wird sicherlich vielleicht irgendwo lösungen dafür geben, aber ich würde das ganze mit MMX vergleichen. Da kannst du schon einmal 4 Pixel auf einmal vergleichen und den ersten Treffer suchen. Aber wie so oft habe ich da nur laut Gedacht.
Gruß Matthias
-
Mh, ne so ganz optimal ist das noch nicht.
Hat sowas noch nie jemand gemacht?
-
Ich hänge im Moment total fest.
So suche ich im Moment alle Pixel im großen Bild, die den gleichen Farbwert+-Tol. haben, wie der erste Pixel im kleinen Bild:
for(int x=0;x<=100;x++){ for(int y=0;y<=150;y++){ src = dc.GetPixel(CPoint(x,y)); int r1 = GetRValue(src);int g1 = GetGValue(src);int b1 = GetBValue(src); vgl = vgl_dc.GetPixel(CPoint(1,1)); int r2 = GetRValue(vgl);int g2 = GetGValue(vgl);int b2 = GetBValue(vgl); if( r1-tol<r2 && r1+tol>r2 && g1-tol<g2 && g1+tol>g2 && b1-tol<b2 && b1+tol>b2 ){ dc.SetPixel(CPoint(x,y),RGB(255,0,0)); } } }Damit schränke ich zwar das Gesamtfeld ein aber es gibt immernoch einige hundert Positionen an denen das kleine Bild theoretisch starten könnte.
Ich denke, dass sich hier eine rekursive Lösung weiterhelfen sollte aber ich komme gerade nicht weiter.
Wäre für jede Hilfe dankbar!
Michael
-
Aber deine for-Schleifen nit Get und SetPixel vielleicht? Versteh ich nicht
Gruß Matthias