Frage

Gibt es eine einfache Lösung, um einem Bild in Qt Bewegungsunschärfe hinzuzufügen?Ich habe kein gutes Tutorial über Unschärfe gefunden.Ich brauche etwas wirklich Einfaches, das ich verstehen könnte und das wirklich gut wäre, wenn ich die Unschärfewinkel ändern könnte.

War es hilfreich?

Lösung

Qt hat keinen Bewegungsunschärfefilter.Ich habe mir den Code von angesehen QGraphicsBlurEffect;es verwendet QPixmapBlurEffect welches selbst eine interne Hilfsmethode namens verwendet expblur (exponentielle Unschärfe).

expblur selbst verwendet einen eindimensionalen Unschärfeeffekt (Bewegungsunschärfe in X-Richtung, Methode qt_blurrow) zweimal.Es dreht das Bild zwischen den beiden Unschärfen um 90 Grad und dreht es anschließend zurück.

Also eigentlich, Qt hat ein Bewegungsunschärfeeffekt, der jedoch nur intern ist.Sie müssen also Ihren eigenen Effekt schreiben.Schauen Sie sich dazu den Code von an qt_blurrrow, die Sie in den Qt-Quellen unter finden können src/gui/qpixmapfilter.cpp.Dies gibt Ihnen eine gute Qualität für den Filter, da es sich um einen exponentiellen Unschärfefilter anstelle eines linearen handelt.

Wenn Sie nicht so tief in den Qt-Quellcode einsteigen möchten, nehmen Sie diesen Pseudocode als Anfang:

foreach pixel (x, y) in image {
    for dx = -r to r with x+dx within image {
        for dy = -r to r with y+dy within image {
            Add pixel (x+dx, y+dy) of the source image with ↩
            factor (matrix[dx, dy]) to the target image.
        }
    }
}

wobei die Matrix so definiert werden könnte (für horizontale Bewegungsunschärfe mit Radius 2):

0   0   0   0   0
0   0   0   0   0
0.1 0.2 0.4 0.2 0.1
0   0   0   0   0
0   0   0   0   0

Beachten Sie, dass die Summe aller Einträge 1 sein muss, oder Sie müssen die Farben durch die Summe der Matrixeinträge dividieren.

Das Erstellen dieser Matrix für einen gegebenen Radius r und Winkel α ist schwierig, wenn Sie beliebige Winkel für α zulassen möchten (nicht nur 90-Grad-Schritte).[BEARBEITEN:Siehe Kommentar 3 für eine einfache Generierung einer solchen Matrix .]

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top