Давайте посмотрим, какое изображение получается skimage.feature.canny
:
edges = feature.canny(blimage)
>>> print(edges.dtype)
bool
Это логическое изображение, True
для белого, False
для черного. PIL правильно идентифицирует тип данных и пытается сопоставить его с его собственным 1-битным режимом, который "1"
(см. Документы PIL об этом ).
Это выглядит сломанным, хотя, кажется, он не получает должную ширину в байтах или что-то в этом роде.
Возникла проблема , похоже, они исправили преобразование PIL
в NumPy
, но, очевидно, обратное все еще не работает.
В любом случае, короче говоря, ваша лучшая ставка для успешного преобразования двоичного изображения из NumPy
в PIL
- преобразование его в оттенки серого:
edges_pil = Image.fromarray((edges * 255).astype(np.uint8))
>>> print edges_pil.mode
L
Если вам действительно нужно 1-битное изображение, вы можете затем преобразовать его с помощью
edges_pil = edges_pil.convert('1')