Spaces:
Sleeping
Sleeping
# Copyright (c) OpenMMLab. All rights reserved. | |
import cv2 | |
import numpy as np | |
from mmocr.utils.typing_utils import ArrayLike | |
def fill_hole(input_mask: ArrayLike) -> np.array: | |
"""Fill holes in matrix. | |
Input: | |
[[0, 0, 0, 0, 0, 0, 0], | |
[0, 1, 1, 1, 1, 1, 0], | |
[0, 1, 0, 0, 0, 1, 0], | |
[0, 1, 1, 1, 1, 1, 0], | |
[0, 0, 0, 0, 0, 0, 0]] | |
Output: | |
[[0, 0, 0, 0, 0, 0, 0], | |
[0, 1, 1, 1, 1, 1, 0], | |
[0, 1, 1, 1, 1, 1, 0], | |
[0, 1, 1, 1, 1, 1, 0], | |
[0, 0, 0, 0, 0, 0, 0]] | |
Args: | |
input_mask (ArrayLike): The input mask. | |
Returns: | |
np.array: The output mask that has been filled. | |
""" | |
input_mask = np.array(input_mask) | |
h, w = input_mask.shape | |
canvas = np.zeros((h + 2, w + 2), np.uint8) | |
canvas[1:h + 1, 1:w + 1] = input_mask.copy() | |
mask = np.zeros((h + 4, w + 4), np.uint8) | |
cv2.floodFill(canvas, mask, (0, 0), 1) | |
canvas = canvas[1:h + 1, 1:w + 1].astype(np.bool_) | |
return ~canvas | input_mask | |