import cv2
import sys
import numpy as np
import imutils as im

(major_ver, minor_ver, subminor_ver) = cv2.__version__.split('.')
print(cv2.__version__)


def to_rect(bbox):
	top_left = (bbox[0], bbox[1])
	bottom_right = (top_left[0] + bbox[2], top_left[1] + bbox[3])

	return top_left, bottom_right


def bbox_add_position(bbox, bbox_add):
	res = (bbox[0] + bbox_add[0], bbox[1] + bbox_add[1], bbox[2], bbox[3])
	return res


def bbox_round(src):
	x = int(round(src[0]))
	y = int(round(src[1]))
	w = int(round(src[2]))
	h = int(round(src[3]))

	return x, y, w, h


def bbox_center(bbox):
	x = round(bbox[0] + bbox[2]/2)
	y = round(bbox[1] + bbox[3]/2)

	return x, y


def bbox_extend(bbox: cv2.typing.Rect, factor: float = 0):
	we2 = bbox[2]*factor/2
	he2 = bbox[3]*factor/2

	return bbox_round((bbox[0]-we2, bbox[1]-he2, bbox[2]+2*we2, bbox[3]+2*he2))


def image_crop(src, bbox: cv2.typing.Rect):
	bb = bbox_round(bbox)
	x = bb[0]
	y = bb[1]
	w = bb[2]
	h = bb[3]

	dst = src[y:y+h, x:x+w]
	return dst


def process_image_bbox(src):
	# convert to gray
	gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)

	return gray
