首页 > 解决方案 > OpenCV 错误:参数“M”的预期 cv::UMat

问题描述

我是 Python 新手,因此在调试脚本时遇到了麻烦。我正在尝试使用脚本创建一个“平均脸opencv”,以用我自己的图像重新创建。这是我正在使用的 Github 存储库,但同样适用于这个这个

地标检测部分有效,但average.py脚本抛出我不明白如何解决的错误。

我通过将xrange()函数替换为range(). 比estimateRigidTransform()似乎被贬低了,我把它换成了estimateAffinePartial2D()这么好。

现在控制台向我抛出以下错误:

TypeError: Expected cv::UMat for argument 'M'

这是脚本的代码片段:

# Apply affine transform calculated using src_tri and dst_tri to src and
# output an image of size.
def apply_affine_transform(src, src_tri, dst_tri, size):

    # Given a pair of triangles, find the affine transform.
    warp_mat = cv2.getAffineTransform(np.float32(src_tri), np.float32(dst_tri))

    # Apply the Affine Transform just found to the src image
    dst = cv2.warpAffine(src, warp_mat, (size[0], size[1]), None,
        flags=cv2.INTER_LINEAR, borderMode=cv2.BORDER_REFLECT_101)

    return dst

有关更多可重现的代码,请参阅此问题介绍中的 repos。

非常感谢所有帮助!

标签: pythonopencvopencl

解决方案


代替使用tform = cv2.estimateAffinePartial2D(np.array([inPts]), np.array([outPts]))和返回tform,返回tform[0]

有关更多详细信息,请参阅文档

您会注意到estimateAffinePartial2D返回retValinliers. 这就是为什么当你返回时tform,你会得到一个TypeError.

我还创建了一个 PR 来修复我们 LearnOpenCV GitHub 存储库中的代码。

维什韦什

编辑:你可以在这里查看 PR 。


推荐阅读