Я играю с программой сегментации Mask RCNN (https://github.com/matterport/Mask_RCNN), которая обучается на наборе данных COCO. Он обнаруживает людей (наряду со многими другими объектами, которыми я также пренебрегаю) на изображении и возвращает одну или несколько масок Person, то есть логические массивы Numpy, содержащие значения True для всех пикселей, которые классифицируются как «Person», и значения False для всех другие пиксели:
Таким образом, введенное изображение (массив формы uint8 (3900,2922,3)) становится маской (массив логических форм ( 3900,2922)) или несколько масок, когда на снимке обнаружено несколько человек.
Теперь я могу использовать эту маску, чтобы вырезать человека из изображения с помощью простого Numpy индексации массива:
mask3d = np.dstack([mask]*3)
cut_out_mask = np.invert(mask3d)
res = np.where(cut_out_mask, 0, image)
Это возвращает следующее изображение:
Поскольку маски, возвращаемые программой Mask_RCNN, довольно узкие, я хотел бы добавить поле в несколько пикселей (скажем, 15 пикселей), так что я получаю что-то вроде этого:
Какие функции Numpy / OpenCV можно использовать, чтобы вырезать маску из исходное изображение (похоже на нп .where), добавив поле 15 пикселей вокруг маски?