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)
Другие вопросы по тегам