人脸检测实战终极:使用 OpenCV 和 Python 进行人脸对齐

根据所需的左眼 x 坐标计算所需的右眼。从 1.0 中减去 self.desiredLeftEye[0] 因为所需的RightEyeX 值应该与图像的右边缘等距,因为相应的左眼 x 坐标与其左边缘的距离相同。

然后可以通过获取当前图像中眼睛之间的距离与所需图像中眼睛之间的距离的比率来确定人脸的比例

首先,计算欧几里得距离比 dist 。

接下来,使用左右眼 x 值之间的差异,计算所需的距离,desiredDist。

通过在第 52 行乘以所需的面宽来更新所需的距离。这实质上是根据所需的宽度缩放的眼睛距离。

最后,比例是通过将 desiredDist 除以我们之前计算的 dist 来计算的。

现在有了旋转角度和比例,需要在计算仿射变换之前采取一些步骤。这包括找到眼睛之间的中点以及计算旋转矩阵并更新其平移分量:

compute center (x, y)-coordinates (i.e., the median point)

between the two eyes in the input image

eyesCenter = (int((leftEyeCenter[0] + rightEyeCenter[0]) // 2),

int((leftEyeCenter[1] + rightEyeCenter[1]) // 2))

grab the rotation matrix for rotating and scaling the face

M = cv2.getRotationMatrix2D(eyesCenter, angle, scale)

update the translation component of the matrix

tX = self.desiredFaceWidth * 0.5

tY = self.desiredFaceHeight * self.desiredLeftEye[1]

M[0, 2] += (tX - eyesCenter[0])

M[1, 2] += (tY - eyesCenter[1])

计算 eyeCenter ,即左右眼之间的中点。 这将用于我们的旋转矩阵计算。 本质上,这个中点位于鼻子的顶部,是我们将面部旋转的点:

image-20211212214237870

为了计算旋转矩阵 M ,我们使用 cv2.getRotationMatrix2D 指定 eyeCenter 、角度和比例。这三个值中的每一个都先前已计算过,因此请根据需要返回。

cv2.getRotationMatrix2D 的参数说明如下:

  • eyeCenter :眼睛之间的中点是我们将围绕面部旋转的点。

  • angle:我们将面部旋转到的角度,以确保眼睛位于同一水平线上。

  • scale :我们将放大或缩小图像的百分比,确保图像缩放到所需的大小。

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值