Сохранение массива Numpy в виде изображения (инструкции) - PullRequest
9 голосов
/ 02 августа 2011

Я нашел свой ответ в предыдущем посте: Сохранение массива Numpy в виде изображения .Единственная проблема заключается в том, что не так много инструкций по использованию модуля PyPNG.

Есть только несколько примеров в Интернете - http://packages.python.org/pypng/ex.html#numpy http://nullege.com/codes/search/png.Writer.write

Но что делатьЯ делаю в свете ошибок .write, как это:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/png.py", line 638, in write
    nrows = self.write_passes(outfile, rows)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/png.py", line 783, in write_passes
    extend(row)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/png.py", line 780, in <lambda>
    return lambda sl: f(map(int, sl))
TypeError: argument 2 to map() must support iteration

Вот где ошибка происходит в моем коде, PCA_tool.py (ошибка появляется после "folder.write (outfilename, PrincipalComponent"):

#PrincipalComponent.save(path+'transform_'+str(each)+'.png', format='PNG')
outfilename = open(str(path)+'transformed/transform_'+str(each)+'.png', 'wb')
folder = png.Writer(m,n,greyscale=True)
folder.write(outfilename, PrincipalComponent)
outfilename.close()

sys.exit(0)

Я пытаюсь сохранить элемент numpy.ndarray элемента 8400 в виде столбца = 80, m = 105 строки в png изображении в оттенках серого.

Спасибо,

Ответы [ 4 ]

23 голосов
/ 02 августа 2011

Возможно, вам лучше использовать PIL:

import Image
import numpy as np

data = np.random.random((100,100))

#Rescale to 0-255 and convert to uint8
rescaled = (255.0 / data.max() * (data - data.min())).astype(np.uint8)

im = Image.fromarray(rescaled)
im.save('test.png')
1 голос
/ 29 августа 2017
import matplotlib.pyplot as plt
import numpy as np
plt.imshow(np.random.random(100, 100))
plt.savefig('')
1 голос
/ 27 августа 2014

Обновление ответа в порядке

rescaled = np.uint8(b)

через https://stackoverflow.com/a/7700789/184085

0 голосов
/ 31 мая 2018

Лучше всего использовать scipy для этого.

from scipy.misc import imsave
# x is the array you want to save 
imsave("image.png", x)

Полная документация здесь: https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.misc.imsave.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...