Python модуль Mahotas проблема с порогом
Я использую этот учебник http://pythonvision.org/basic-tutorial
Однако, когда я передаю изображение PNG:
T = mahotas.thresholding.otsu(dna)
Я получаю ошибку:
Ошибка типа: mahotas.otsu: эта функция принимает только целочисленные типы (переданный массив типа float32)
У кого-нибудь есть опыт. с этим вопросом? Спасибо!
2 ответа
Ошибка в основном говорит о том, что тип элементов в вашем массиве изображений - это 32-разрядное число с плавающей запятой, а не целое число, что необходимо. Документы также говорят, что этот метод требует unsigned int. Смотрите здесь.
Чтобы преобразовать числовой массив в 8-разрядные целые числа без знака, выполните следующие действия:
# Assuming I is your image. Convert to 8 bit unsigned integers.
I_uint8 = I.astype('uint8')
ОБНОВЛЕНИЕ: Пожалуйста, смотрите комментарий создателя Mahotas ниже по вопросу многоканальных изображений.
Решение @lightalchemist работает, просто не забудьте сначала умножить изображение на 255:
img = (img*255).astype('uint8')
Я тоже следую этому примеру. После гауссова фильтра dnaf становится float64
print(dnaf.dtype)
Вам нужно преобразовать обратно в 8-битное изображение
dnaf = dnaf.astype('uint8')
print(dnaf.dtype)
И продолжайте с пороговым значением
T = mh.thresholding.otsu(dnaf)