我需要一个与Python中的transformPointsForward(来自MatLab)的等效函数。我有一个来自:https://github.com/jwyang/face-alignment的代码,我正试图使用openCv在Python中重新编写。在
我在MatLab中有以下函数:
[pixel_a_x_lmcoord, pixel_a_y_lmcoord] = transformPointsForward(Tr_Data{s}.meanshape2tf{k}, pixel_a_x_imgcoord', pixel_a_y_imgcoord');
在哪里
Tr_Data{s}.meanshape2tf{k]
是一个几何变换,指定为affine2d
几何变换对象。在pixel_a_x_imgcoors
是向量1000x1pixel_a_y_imgcoors
是向量1000x1我的尝试
我正在寻找一个等效函数,但没有成功。到目前为止,我已经找到了matplotlib.transform.Affine2D,所以我已经准备好了所有的输入。在
问题是,在Python中找不到正向几何变换函数。我尝试过cv2.perspectiveTransform(),但它给我的输出完全不同:
示例:
MatLab
^{pr2}$输出:
x = [18 18 18]
y = [45 51 57]
Python
A = np.transpose(np.array([[1,2,3],[4,5,6],[0,0,1]], dtype='float32'))
v = np.array([np.transpose(np.array([[1,5,9],[7,5,3]],dtype='float32'))])
cv2.perspectiveTransform(v,A)
输出:
array([[[ 0.63043481, 0.80434781],
[ 0.54347825, 0.76086956],
[ 0.45652175, 0.71739131]]], dtype=float32)
我试过转换函数,但是cv2.transform的输出是错误的。在
代码:
A = np.transpose(np.array([[1,2,3],[4,5,6],[0,0,1]], dtype='float32'))
v = np.array([np.transpose(np.array([[1,5,9],[7,5,3]],dtype='float32'))])
cv2.transform(v,A)
输出:
array([[[ 29., 37., 45.],
[ 25., 35., 45.],
[ 21., 33., 45.]]], dtype=float32)
我试图使用没有[0,0,1]
行的矩阵,但是结果仍然不正确。在
代码:
A = np.transpose(np.array([[1,2,3],[4,5,6]], dtype='float32'))
v = np.array([np.transpose(np.array([[1,5,9],[7,5,3]],dtype='float32'))])
cv2.transform(v,A)
输出:
array([[[ 29., 37., 45.],
[ 25., 35., 45.],
[ 21., 33., 45.]]], dtype=float32)
当你需要一个用Python(或任何其他语言)编写的MatLab函数,而它不在它的本机库中(就像这里它不在
NumPy
)中,那么最佳实践是在Octave中寻找一个等价的(或至少类似的)函数。在例如,我们在这里寻找来自MatLab的
transformPointsForward
。倍频程中的几乎等价函数是tformfwd()。在Python代码
受
tformfwd
启发的一个非常简单的几何正向转换代码如下所示:输出:
^{pr2}$相关问题 更多 >
编程相关推荐