Dans les graphiques, nous utilisons généralement homogenuous transform matrices pour des tâches comme celle-ci. Ainsi, le algo est comme ceci:
créer la matrice de transformation
tenant toutes les transformations que vous voulez. Pour 2D il est 3x3 matrice de transformation homogène ou 2x2 matrice de rotation (pas de traductions).
processus Tous les pixels de destination
copier essentiellement pixel de la source à l'image de destination, mais les boucles sont en boucle chaque pixel de destination (pour éviter les trous arrondis). Alors laissez la boucle passe par (x,y)
de sorte que vous venez de copier pixels ...
dst[y][x] = src[y'][x']
où:
(x',y') = Matrix2x2 * (x,y)
ou
(x',y',w) = Matrix3x3 * (x,y,1)
Peu importe si vous utilisez 2x2 ou matrice 3x3 ou multiplication codée en dur (comme dans l'exemple) voir:
mais vous devez utiliser sin,cos
pour les valeurs de la matrice (une fois par rotation).La seule rotation sans sin,cos
est rotation par 90 deg
Où:
(x',y') = (-y,x)
ou:
(x',y') = (y,-x)
Avez-vous un code source exemple ++ C qui fait manuellement le calcul de la matrice appliquant à l'image? Chaque code que je trouve fonctionne avec opencv donc je ne vois pas comment cela fonctionne en interne. Merci – Bob5421