首页 > 解决方案 > 将openCV python函数转换为C++

问题描述

以下片段是从 openCV python 样本中窃取的:

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++,但我对 python 的了解非常肤浅。所以我特别遇到了以下问题:

A[:,2] = (sz2, sz2) - np.dot(A[:,:2], ((d-1)*0.5, 0))

我了解剩余的代码。

标签: pythonc++opencv

解决方案


不确定,因为我没有看到一些代码,但很可能:

A[:,:2] 

是矩阵

[[c, -s]
 [s, c]]

然后,与

np.dot(A[:,:2], ((d-1)*0.5, 0))

我们将该矩阵乘以向量

[(d-1)*0.5, 0]

其实是元组,不是向量,但是意思是一样的。

乘法后,我们得到两个元素的向量,然后减去该向量

[sz2, sz2]

A最后,我们用减法的结果替换 2x3 矩阵中的零


推荐阅读