def bbox2region(bbox): """Convert bbox to Rectangle or Polygon Class object. Args: bbox (ndarray): the format of rectangle bbox is (x1, y1, w, h); the format of polygon is (x1, y1, x2, y2, ...). Returns: Rectangle or Polygon Class object. """ if vot is None: raise ImportError( 'Please run' 'pip install git+https://github.com/votchallenge/toolkit.git' 'to manually install vot-toolkit') if len(bbox) == 1: return Special(bbox[0]) elif len(bbox) == 4: return Rectangle(bbox[0], bbox[1], bbox[2], bbox[3]) elif len(bbox) % 2 == 0 and len(bbox) > 4: return Polygon([(x_, y_) for x_, y_ in zip(bbox[::2], bbox[1::2])]) else: raise NotImplementedError( f'The length of bbox is {len(bbox)}, which is not supported')
def convert_traxregion(region: TraxRegion) -> Region: if region.type == TraxRegion.RECTANGLE: x, y, width, height = region.bounds() return Rectangle(x, y, width, height) elif region.type == TraxRegion.POLYGON: return Polygon(list(region)) elif region.type == TraxRegion.MASK: return Mask(region.array(), region.offset(), optimize=True) return None
def test_convert_region(self): convert_region(Rectangle(0, 0, 10, 10)) convert_region(Polygon([(0, 0), (10, 0), (10, 10), (0, 10)])) convert_region(Mask(np.ones((100, 100), dtype=np.uint8)))