В настоящее время я работаю с обработкой изображений в Python, используя библиотеку scikit-image. Я пытаюсь сделать двоичное изображение, используя пороговое значение sauvola со следующим кодом:
from PIL import Image
import numpy
from skimage.color import rgb2gray
from skimage.filters import threshold_sauvola
im = Image.open("test.jpg")
pix = numpy.array(im)
img = rgb2gray(pix)
window_size = 25
thresh_sauvola = threshold_sauvola(img, window_size=window_size)
binary_sauvola = img > thresh_sauvola
Что дает следующий результат:
вывод - массив numpy с типом данных этого изображения - bool
[[ True True True ... True True True]
[ True True True ... True True True]
[ True True True ... True True True]
...
[ True True True ... True True True]
[ True True True ... True True True]
[ True True True ... True True True]]
Проблема в том, что мне нужно преобразовать этот массив обратно в изображение PIL, используя следующую строку кода:
image = Image.fromarray(binary_sauvola)
что делает изображение похожим на это:
Я также пытался изменить тип данных с bool на uint8, но тогда я получу следующее исключение:
AttributeError: 'numpy.ndarray' object has no attribute 'mask'
До сих пор я не нашел решения для получения изображения PIL, которое выглядит как результат установки порога.