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]
其中
R
是2*2
矩阵,而T
是A
的最后一列。代码中的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/