Tôi đang cố gắng lấy một số mã sẽ thực hiện phép biến đổi phối cảnh (trong trường hợp này là xoay vòng 3D) trên hình ảnh.xoay 3D trên hình ảnh
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)
Khi tôi xoay quanh trục z, mọi thứ hoạt động như mong đợi, nhưng xoay quanh trục x hoặc y có vẻ hoàn toàn tắt. Tôi cần phải xoay theo các góc nhỏ như pi/200 trước khi tôi bắt đầu nhận được kết quả có vẻ hợp lý. Bất cứ ý tưởng những gì có thể là sai?