2013-11-19 6 views
5

Я использую этот учебник http://pythonvision.org/basic-tutorialмодуля Python Mahotas пороговый вопрос

Однако, когда я прохожу PNG изображения:

T = mahotas.thresholding.otsu(dna) 

Я получаю сообщение об ошибке:

TypeError: mahotas.otsu: This function only accepts integer types (passed array of type float32)

Кто-нибудь есть эксп. с этой проблемой? Благодаря!

ответ

7

Ошибка в основном говорит о том, что тип элементов в вашем массиве изображений составляет 32 бит, а не целое число. Документы также говорят, что для этого метода требуется неподписанный int. См. here.

Чтобы преобразовать Numpy массив беззнаковых 8-битовых целых чисел, сделайте следующее:

# Assuming I is your image. Convert to 8 bit unsigned integers. 
I_uint8 = I.astype('uint8') 

UPDATE: Пожалуйста, смотрите комментарий Создателем Mahotas' ниже по вопросу о многоканальных изображений.

+0

автор mahotas здесь: Оцу mahotas' будет работать с многоканальными изображениями непосредственно (Оцу просто вычисляется на гистограмма). Это имеет смысл для многих научных целей и, в качестве бонуса, автоматически делает правильные вещи, если изображение RGB, где все каналы имеют одинаковые значения. – luispedro

+0

@luispedro: Спасибо за комментарий. – lightalchemist

1

решение по @lightalchemist работ, только не забудьте умножить изображение на 255 первых:

img = (img*255).astype('uint8') 
+0

Можете ли вы просто объяснить, почему это так? –

+1

Прошло некоторое время, поэтому я надеюсь, что мой ответ по-прежнему применим: пиксели изображения обычно представлены с использованием одного из двух понятий: - либо как плавающие в диапазоне [0.0, 1.0], где 0.0 представляет черный, а 1.0 представляет белый , или - как целые числа в диапазоне [0, 255], 0 является черным, а 255 - белым OP необходимо преобразовать изображение из понятия 1 в понятие 2, поэтому значения пикселей следует масштабировать до 255, следовательно умножение. –

+1

Спасибо за объяснение, я ценю это! –