У меня была эта проблема давным-давно. Просто добавьте поле в bbox, а затем убедитесь, что оно не покидает изображение.
Если у вас есть ограничивающие рамки:
def expand(bbox, margin=5):
# supose bbox is x1, y1, x2, y2
return [
bbox[0, 0] - margin,
bbox[1] - margin,
bbox[2] + margin,
bbox[2] + margin]
bbox_expanded = expand(bbox)
img_crop = img[max(0, bbox[1]):min(img.shape[0], bbox[3]), max(bbox[0], 0):min(img.shape[1], bbox[2]), :]
Если у вас 4 очка:
def expand(points, margin):
# supose points is 1, p2, p3, p4
return [
[points[0, 0] - margin, points[0, 1] - margin],
[points[1, 0] + margin, points[1, 1] - margin],
[points[2, 0] + margin, points[2, 1] + margin],
[points[3, 0] - margin, points[3, 1] + margin]]
points_expanded = expand(points)