人脸仿射对齐 & 框绘制

code
import cv2
import numpy as np
from skimage import transform as trans

img_size = 112	
# Below is for 112*112 face img. For 112*96 face: dst[:,0]-8.0
dst = np.array([[38.2946, 51.6963],
  				[73.5318, 51.5014],
 			 	[56.0252, 71.7366],
  				[41.5493, 92.3655],
  				[70.7299, 92.2041] ], dtype=np.float32 )
tform = trans.SimilarityTransform()
tform.estimate(src, dst)    
M = tform.params[0:2,:]
warped_img = cv2.warpAffine(img,M,(img_size, img_size), borderValue = 0.0) 

# 也可基于estimateRigidTransform()计算多个二维点对或图像之间的仿射变换矩阵(2x3)
# 此外有cv2.getAffineTransform(), 可用于计算3个二维点对之间的仿射变换矩阵(2x3)
M = cv2.estimateRigidTransform(src, dst, True)

# draw bbox using cv2
img1 = img.copy()
cv2.rectangle(img1, (int(rect[0]), int(rect[1])), (int(rect[2]), int(rect[3])), (0, 0, 255), 2) 
text = "{:.3f}".format(rect[4])
cv2.putText(img1, text, (int(rect[0]), int(rect[1])+12), cv2.FONT_HERSHEY_DUPLEX, 1, (255, 255, 255))
for i in range(4):
    x1 = int(landm[i*2])
    y1 = int(landm[i*2+1])
    cv2.circle(img1, (x1,y1), 1, (0,255,0),4)
cv2.imwrite('draw.jpg',img1)

# 其他:透视变换
# M = cv2.getPerspectiveTransform(src, dst)    
# align_img = cv2.warpPerspective(img, M, target_size)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值