Если вы сделаете это:
im = Image.open('mask.gif')
print(im)
Вывод
<PIL.GifImagePlugin.GifImageFile image mode=P size=683x512 at 0x7FC0C86FF430>
вы увидите, что ваше изображение является изображением палитры, потому что mode=P
. Это означает, что значения в изображении не являются значениями RGB или оттенков серого, а являются индексами в палитре. Если посмотреть на палитру:
np.array(im.getpalette()).reshape(256,3)
Out[25]:
array([[255, 255, 255], <--- palette entry 0
[ 0, 0, 0], <--- palette entry 1
[ 2, 2, 2],
[ 3, 3, 3],
[ 4, 4, 4],
[ 5, 5, 5],
...
...
вы увидите, что запись 0 — это rgb (255 255 255), так что это означает, что везде, где у вас есть ноль на вашем изображении, он должен отображаться белым! И где бы он ни был на вашем изображении, он должен отображаться черным.
Если вам нужны правильные значения, такие как оттенки серого, вам нужно преобразовать изображение в режим L
, тогда все ваши пиксели будут фактическими значениями серого:
maskPIL = np.array(Image.open('mask.gif').convert('L'))
Более полное объяснение здесь.
person
Mark Setchell
schedule
13.04.2021