Closed kizilkanat closed 7 years ago
This worked fine:
import numpy as np
import cv2
imgSize = (112, 96)
x_ = [30.2946, 65.5318, 48.0252, 33.5493, 62.7299]
y_ = [51.6963, 51.5014, 71.7366, 92.3655, 92.2041]
src = np.array( zip(x_, y_) ).astype(np.float32).reshape(1,5,2)
alignedFaces = []
# there might be more than one faces, hence
# multiple sets of points
for pset in points:
img2 = img.copy()
pset_x = pset[0:5]
pset_y = pset[5:10]
dst = np.array( zip(pset_x, pset_y) ).astype(np.float32).reshape(1,5,2)
transmat = cv2.estimateRigidTransform( dst, src, False )
out = cv2.warpAffine(img2, transmat, (imgSize[1], imgSize[0]))
alignedFaces.append(out)
Good for you.
Hi @DuinoDu , I found transmat = cv2.estimateRigidTransform( dst, src, False ) sometimes return None when the face is side face. But transf = cp2tform(coord5point_ori, coord5point_fixed, 'similarity') can work well. Could you give some help?
Hi, @xizi. Where do you find "transmat = cv2.estimateRigidTransform( dst, src, False ) "? Can you provide url?
It is kizilkanat provide it from above and i have solved this problem by use "transmat = cv2.estimateRigidTransform( dst, src, True ) ". Thanks for your reply.
Good for you.
It's very helpful! Thanks, nttstar.
Hey guys, I just saw @nttstar have 25% better results with skimage SimilarityTransform than OpenCV estimateRigidTransform.
That's insane! The aligned images from 2 methods totally looks the same. Does skimage do any difference things with its function, compare with Opencv?
I do want to use skimage SimilarityTransform in C++, Java also but skimage doesn't support. Do you guys know any which can use in C++, Java but strong liked skimage?
Hi @DuinoDu , I need a Python version of the following matlab routine, which is provided by Yandong Wen to perform a 2-D face alignment using the 5 facial points obtained by MTCNN:
I have already tried some code with OpenCV and skimage, using the points obtained by your code; but no success:
output looks totally wrong: