2014-11-05 6 views
1

У меня возникли проблемы с кодом, который извлекает символы с изображения:питона mahotas: Применение порогового значения фильтра и сохранение изображения в PGN

Пример:

Исходное изображение original Обработанное изображение final

Я применяю кучу фильтров, чтобы попытаться извлечь определенные символы из этих знаков и отправить их в мое программное обеспечение OCR (гауссовые фильтры, сброс воды и порог).

Я хочу, чтобы применить порог Оцу фильтра к изображению, но когда я пытаюсь сохранить изображение, оно становится преобразуется в float64, что делает его unsaveable как PNG:

seeds,nseeds = mahotas.label(dnaf < T) 

labeled = mahotas.cwatershed(dnaf.max() - dnaf, seeds) 

labeled = labeled.astype('uint8') 

T = mahotas.thresholding.otsu(labeled) 

pylab.imshow(labeled > T) 
pylab.show() 

mahotas.imsave('py.png', labeled > T) 

дает мне

File "imgtest2.py", line 67, in <module> 
    mahotas.imsave('py.png', labeled > T) 
    File "/usr/local/lib/python2.7/site-packages/mahotas/io/freeimage.py", line 798, in imsave 
    write(img, filename) 
    File "/usr/local/lib/python2.7/site-packages/mahotas/io/freeimage.py", line 586, in write 
    bitmap, fi_type = _array_to_bitmap(array) 
    File "/usr/local/lib/python2.7/site-packages/mahotas/io/freeimage.py", line 653, in _array_to_bitmap 
    'mahotas.freeimage: cannot write arrays of given type and shape.') 
    ValueError: mahotas.freeimage: cannot write arrays of given type and shape. 

, если я пытаюсь сделать промежуточную переменную, которая сохраняет изображение с порогом прикладной, изображение становится пустым:

seeds,nseeds = mahotas.label(dnaf < T) 

labeled = mahotas.cwatershed(dnaf.max() - dnaf, seeds) 

labeled = labeled.astype('uint8') 

T = mahotas.thresholding.otsu(labeled) 

final = labeled > T 

final = final.astype('uint8') 

pylab.imshow(final) 
pylab.show() 

mahotas.imsave('py.png', final) 

final

Что мне делать, чтобы исправить это?

ответ

0

(Автор mahotas здесь):

Я думаю, что изображение правильно сохранено, но вы смотрите на это неправильно. После того, как линии

final = final.astype('uint8') 

является окончательным uint8 изображение с 0 с и 1 с. Таким образом, «белые» биты очень темные. Попробуйте умножив его на 255:

mahotas.imsave('py.png', 255 * final) 

Или сохранить его, как это, но визуализировать его в растянутой версии:

pylab.imshow(255 * final) 
pylab.show()