Есть ли более эффективный способ, чем определение всех возможностей ограничивающих рамок, а затем сравниваете их размер?
Пример кода:
Код: Выделить всё
import matplotlib.patches as patches
import matplotlib.pyplot as plt
import numpy as np
mask = np.array([[0, 1, 0, 0, 0, 1, 0, 1], # example mask
[0, 0, 0, 1, 1, 0, 0, 1],
[1, 1, 0, 1, 1, 1, 0, 0],
[1, 1, 1, 1, 1, 1, 1, 0],
[0, 1, 0, 1, 1, 0, 0, 0],
[0, 0, 0, 1, 0, 0, 1, 1],
[0, 0, 0, 1, 1, 0, 0, 0],
[0, 0, 0, 0, 1, 0, 0, 0],
[0, 1, 1, 1, 0, 0, 1, 1]])
def find_largest_bbox(mask):
# TODO
return 3, 1, 4, 4
bbox = find_largest_bbox(mask)
plt.close()
plt.imshow(mask)
x, y = bbox[0] - 0.5, bbox[1] - 0.5
w, h = bbox[2] - bbox[0] + 1, bbox[3] - bbox[1] + 1
rect = patches.Rectangle((x, y), w, h, linewidth=2, edgecolor="red", facecolor="none")
plt.gca().add_patch(rect)
plt.show()

Подробнее здесь: https://stackoverflow.com/questions/787 ... -mask-nump