Domanda

C'è una soluzione semplice per aggiungere motion blur a un'immagine in qt?Non ho trovato nessun buon tutorial sulla sfocatura.Ho bisogno di qualcosa di veramente semplice, che potevo capire, e sarebbe davvero bravo se potessi cambiare gli angoli di sfocatura.

È stato utile?

Soluzione

Qt non ha un filtro sfocatura movimento. Ho esaminato il codice di QGraphicsBlurEffect; Utilizza QPixmapBlurEffect che utilizza un metodo di helper interno chiamato expblur (sfocatura esponenziale).

expblur stesso utilizza un effetto sfocatura monodimensionale (sfocatura del movimento in direzione X, metodo qt_blurrow) due volte. Ruota l'immagine tra le due sfocature di 90 gradi e succedendo indietro indietro.

Quindi in realtà, qt ha un effetto sfocatura di movimento ma questo è solo interno. Quindi devi scrivere il tuo effetto. Per fare ciò, dai un'occhiata al codice di qt_blurrrow, che puoi trovare nelle fonti QT di src/gui/qpixmapfilter.cpp. Questo ti darà una buona qualità per il filtro, poiché è un filtro sfocatura esponenziale anziché un lineare.

Se non vuoi andare così in profondità nel codice sorgente QT, prendi questo pseudo-codice come inizio:

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.
        }
    }
}
.

Dove potrebbe essere definito la matrice come questa (per la sfocatura del movimento orizzontale con il raggio 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
.

Si noti che la somma di tutte le voci deve essere 1, oppure devi dividere i colori con la somma delle voci della matrice.

Costruire questa matrice per un determinato raggio R e angolo α è difficile quando si desidera consentire angoli arbitrari per α (non solo 90 gradi). [Modifica: vedere il commento 3 per una generazione facile di una tale matrice.]

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top