У меня есть массив изображений
img = [[[63 48 27]
[ 63 48 27]
[ 63 48 27]
...
[117 88 70]
[113 84 66]
[111 82 64]]
[[ 64 49 28]
[ 64 49 28]
[ 64 49 28]
...
[117 88 70]
[114 85 67]
[111 82 64]]
[[ 65 50 29]
[ 66 51 30]
[ 66 51 30]
...
[118 89 71]
[114 85 67]
[111 82 64]]...
И еще один массив пикселей, которые я хочу сохранить в этом массиве изображений:
mask = [[[False False False ... False False False]
[False False False ... False False False]
[False False False ... False False False]
...
[False False False ... False False False]
[False False False ... False False False]
[False False False ... False False False]]]
Я думал, что смогу просто сделать img[mask]
но я получаю boolean index did not match indexed array along dimension 0; dimension is 549 but corresponding boolean dimension is 1
. Как я могу либо расширить массив масок обратно до нужного измерения, это происходит от преобразования маски детеррон2 в numpy массив mask = outputs['instances'].pred_masks.numpy()
(изначально это тензор). Или, и это может быть проще, я думаю, если значение в массиве маски numpy равно False
, тогда преобразуйте элемент в массиве изображения в белый / 255.
Я использую функцию:
from matplotlib.image import imread
import scipy.misc
def cropper(org_image_path, mask_array, out_file_name):
img = imread(org_image_path)
output = img[mask_array]
scipy.misc.toimage(output).save(out_file_name)