I am trying to crop a portion of an image as shown below using opencv / PIL . I want to crop the rectangle area as shown in red lines in the image in the below link. It is tilted at an angle.
I used numpy slicing logic as below. But it doesn't crop at an angle. It crops a normal straight rectangle
rect = cv2.boundingRect(pts)
x,y,w,h = rect
cropped = img[y:y+h, x:x+w]
Also tried rotating the entire image at an angle and then cropping that part but it shrinks the resulting image
I am able to draw a rectangle on that image using the below code :
def draw_angled_rec(x0, y0, width, height, angle, img):
_angle = angle * math.pi / 180.0
b = math.cos(_angle) * 0.5
a = math.sin(_angle) * 0.5
pt0 = (int(x0 - a * height - b * width),
int(y0 + b * height - a * width))
pt1 = (int(x0 + a * height - b * width),
int(y0 - b * height - a * width))
pt2 = (int(2 * x0 - pt0[0]), int(2 * y0 - pt0[1]))
pt3 = (int(2 * x0 - pt1[0]), int(2 * y0 - pt1[1]))
cv2.line(img, pt0, pt1, (255,0,0), 3)
cv2.line(img, pt1, pt2, (255,0,0), 3)