openCV pyhton样本中的以下片段被盗:

def motion_kernel(angle, d, sz=65):
kern = np.ones((1, d), np.float32)
c, s = np.cos(angle), np.sin(angle)
A = np.float32([[c, -s, 0], [s, c, 0]])
sz2 = sz // 2
A[:,2] = (sz2, sz2) - np.dot(A[:,:2], ((d-1)*0.5, 0))
kern = cv2.warpAffine(kern, A, (sz, sz), flags=cv2.INTER_CUBIC)
return kern

它是恢复由于某种噪声而模糊的图像的程序的一部分。
我正在尝试将此代码转换为C++,但是我对pyhton仅有很肤浅的了解。
所以我特别在行上遇到麻烦:
A[:,2] = (sz2, sz2) - np.dot(A[:,:2], ((d-1)*0.5, 0))

我了解剩余的代码。
有人能帮我吗。提前致谢。

最佳答案

让我们将矩阵A编写为

A=[R | T]

其中R2*2矩阵,而TA的最后一列。代码中的A[:,2]表示T,而A[:,:2]表示R。所以,线
A[:,2] = (sz2, sz2) - np.dot(A[:,:2], ((d-1)*0.5, 0))

只是在计算这个:
R*v + u //v in R^2 is [(0.5(d-1)), 0]^T
        //u in R^2 is [sz2, sz2]^T

然后将其存储在T(A的最后一列)中。

关于c++ - 将openCV python函数转换为C++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59331079/

10-12 14:25