查找覆盖原始矩形的旋转矩形的大小
Find size of rotated rectangle that covers orginal rectangle
大家好,我有一个来自人脸检测系统的人脸边界框,格式为 [x1, y1, x2, y2]
。
我想裁剪并对齐脸部我目前的做法如下:
从眼睛位置计算角度,然后使用 cv2 warpAffine 函数进行旋转和裁剪。
问题是新的旋转边界框没有完全覆盖旧的边界框,我如何计算新的边界框的大小以使其完全包含旧的
选中矩形的原始图像
裁剪和旋转的图像
裁剪部分的代码
center = (x1 + x2) // 2, (y1 + y2) // 2
d_y = eye_center[1] - mouth_center[1]
d_x = eye_center[0] - mouth_center[0]
angle = np.degrees(np.arctan2(d_y, d_x)) + 90
M = cv2.getRotationMatrix2D(center, angle, 1)
M[0, 2] += (width * 0.5) - center[0] # width is x2-x1 from face detector
M[1, 2] += (height * 0.5) - center[1] # height is y2-y1 from face detector
res_img = cv2.warpAffine(img, M, (width, height))
大盒子的尺寸是(对于w,h = width, height
小盒子,旋转角度Fi
):
H = w * Abs(Sin(Fi)) + h * Abs(Cos(Fi))
W = w * Abs(Cos(Fi)) + h * Abs(Sin(Fi))
中心保持不变,因此底角坐标为
xx = centerx - (W-w)/2
yy = centery - (H-h)/2
大家好,我有一个来自人脸检测系统的人脸边界框,格式为 [x1, y1, x2, y2]
。
我想裁剪并对齐脸部我目前的做法如下: 从眼睛位置计算角度,然后使用 cv2 warpAffine 函数进行旋转和裁剪。
问题是新的旋转边界框没有完全覆盖旧的边界框,我如何计算新的边界框的大小以使其完全包含旧的
选中矩形的原始图像
裁剪和旋转的图像
裁剪部分的代码
center = (x1 + x2) // 2, (y1 + y2) // 2
d_y = eye_center[1] - mouth_center[1]
d_x = eye_center[0] - mouth_center[0]
angle = np.degrees(np.arctan2(d_y, d_x)) + 90
M = cv2.getRotationMatrix2D(center, angle, 1)
M[0, 2] += (width * 0.5) - center[0] # width is x2-x1 from face detector
M[1, 2] += (height * 0.5) - center[1] # height is y2-y1 from face detector
res_img = cv2.warpAffine(img, M, (width, height))
大盒子的尺寸是(对于w,h = width, height
小盒子,旋转角度Fi
):
H = w * Abs(Sin(Fi)) + h * Abs(Cos(Fi))
W = w * Abs(Cos(Fi)) + h * Abs(Sin(Fi))
中心保持不变,因此底角坐标为
xx = centerx - (W-w)/2
yy = centery - (H-h)/2