Home > Software engineering >  Find size of rotated rectangle that covers orginal rectangle
Find size of rotated rectangle that covers orginal rectangle

Time:12-21

Hi everyone I have a bounding box of faces from the face detection system in the format [x1, y1, x2, y2].

I want to crop out and align the face my current approach is as follows: calculate the angle from the eye position then rotate and crop using cv2 warpAffine function.

The problem is the new rotated bounding box is not completely covering the old bounding box, how I can calculate the size of the new bounding box so it completely contains the old one

Orginal image with the rectangle selected

Orginal image

Cropped and rotated image

Aligned image

Code doing cropping part

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))

CodePudding user response:

Dimensions of larger box are (for w,h = width, height of smaller box, rotation angle Fi):

 H = w * Abs(Sin(Fi))   h * Abs(Cos(Fi))
 W = w * Abs(Cos(Fi))   h * Abs(Sin(Fi))

Center remains the same, so base corner coordinates are

xx = centerx - (W-w)/2
yy = centery - (H-h)/2
  • Related