bibliotheken, templates und codewiederholungen



  • Guten Morgen,
    es gibt ja verschiedene Bibliotheken für die Bildverarbeitung z.B. OpenCV oder Open eVision. Wie handhaben diese Bibliotheken unterschiedliche Bildformate wenn auf diese z.B. ein Filter angewandt wird ?

    Auf Templatebasis hätte man sicher etwas in der Richtung wie

    template<typename T>
    void Filter(CImage<T>* pImage)
    {
    pImage->pPixels[Index] .... etc
    }

    ..und ohne
    void Filter(CImage* pImage)
    {
    if(pImage->Type == GREY8)
    {
    pImage->pPixels[Index] .... etc
    }
    else if(pImage->Type == COLOR24)
    {
    pImage->pPixels[Index] .... etc
    }
    }

    Das heißt doch, ohne template müsste ich den code für alle unterstützen Bildformate wiederholen. Da können sich doch leicht Fehler einschleichen.
    Gibt es dafür eine elegenatere Methode das zu umgehen ?

    Grüße,
    c-mos



  • Die Klasse würde bestimmt nicht CImage heißen, außerdem würden da mit sicherheit keine Zeiger verwenet werden. Ungarische Notation gäbs auch nicht.

    Und vermutlich gäbs irgendwelche polymorphe Klassen mit virtuellen Funktionen.



  • Hallo,
    die Klassennamen sind nur beispielhaft. Aber selbst Polymorphimus erfordert
    die mehrfache implementierung des Codes.
    Weiterhin, was hat die Übergabe per Pointer und eine ungarische Notation mit der eigentlichen Problemstellung zu tun ? .. Nichts.
    Trotzdem vielen Dank für die erleuchtende Antwort.

    Grüße,
    cmos



  • Wieso erfordert Polymorphismus eine mehrfache Implementierung?



  • Hallo nochmal,
    die Aussage mit dem polymorphimus nehme ich zurück. Hab fix was ausprobiert.
    Einmal die Filterklasse auf template basis implementieren und dann Typspezifisch
    ableiten.,.. denke so könnte das gehen.

    Grüße,
    c-mos



  • Wichtig ist, dass du eine abstrakte Repräsentation des Bildes hast - unabhängig des Quell und Zieltyps.

    Dadurch kannst du Filter und sonstwas auf diese eine abstrakte Repräsentation des Bildes anwenden. Das hat prinzipiell garnichts mit Templates oder Polymorphie zu tun.

    So kannst du dann auch trivial neue Zieltypen und Quelltypen hinzufügen. Da du jedesmal nur Quelltyp in abstrakte Repräsentation umwandeln musst, bzw. abstrakte Repräsentation in Zieltyp.

    Jeden Bildtyp einzeln behandeln wäre viel zu aufwendig.



  • Hallo,
    vielen Dank für die Hinweise.
    Wie könnte so eine abstrakte Beschreibung eines Bildes aussehen ?
    Wenn ich eine Abstrakte Klasse für ein Bild habe, dann habe ich doch dort auch entweder eine abstrakte Methode die z.b. einen Zeiger auf auf die Bilddaten zurrück gibt und evtl noch einen void Zeiger auf die Bilddaten.
    An irgendeiner Stelle muss dann doch aber im Code unterscheiden von welchem Datentype die Bilddaten sind bzw. das Filter sollte das jedenfalls wissen.
    Ich könnte mit nem char Zeiger als "dummy" Zeiger arbeiten und dann mit nem Typsystem abfangen von welchem Typ das Bild ist um dann zu wissen wieviel Byte durch diesen Datentyp belegt werden.
    Kannst du mir die Richtung angeben oder kurz erklären was du meinst ?

    Grüße,
    c-mos


Anmelden zum Antworten