Estoy tratando de obtener algún código que realice una transformación de perspectiva (en este caso, una rotación en 3D) en una imagen.rotación en 3D en la imagen
import os.path
import numpy as np
import cv
def rotation(angle, axis):
return np.eye(3) + np.sin(angle) * skew(axis) \
+ (1 - np.cos(angle)) * skew(axis).dot(skew(axis))
def skew(vec):
return np.array([[0, -vec[2], vec[1]],
[vec[2], 0, -vec[0]],
[-vec[1], vec[0], 0]])
def rotate_image(imgname_in, angle, axis, imgname_out=None):
if imgname_out is None:
base, ext = os.path.splitext(imgname_in)
imgname_out = base + '-out' + ext
img_in = cv.LoadImage(imgname_in)
img_size = cv.GetSize(img_in)
img_out = cv.CreateImage(img_size, img_in.depth, img_in.nChannels)
transform = rotation(angle, axis)
cv.WarpPerspective(img_in, img_out, cv.fromarray(transform))
cv.SaveImage(imgname_out, img_out)
Cuando gire alrededor del eje z, todo funciona como se esperaba, sino que gira alrededor del eje X o Y parece completamente fuera. Necesito rotar en ángulos tan pequeños como pi/200 antes de comenzar a obtener resultados que parecen del todo razonables. ¿Alguna idea de lo que podría estar mal?