我是Python的新手,因此在调试脚本时遇到了麻烦。我正在尝试使用opencv
脚本创建一个'average face',以使用自己的图像重新创建。 Here's the Github repo我正在使用,但this one和this one也是一样。
地标检测部分可以工作,但是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
有关可重现的代码,请参见此问题简介中的回购。
非常感谢所有帮助!
答案 0 :(得分:2)
返回tform = cv2.estimateAffinePartial2D(np.array([inPts]), np.array([outPts]))
,而不是使用tform
并返回tform[0]
。
有关更多详细信息,请参见documentation。
您会注意到estimateAffinePartial2D
返回retVal
和inliers
。这就是为什么返回tform
时得到TypeError
的原因。
我还创建了PR来修复LearnOpenCV GitHub存储库上的代码。
Vishwesh
编辑:您可以检查PR here。