конвертировать pypng в массив numpy - PullRequest
0 голосов
/ 28 февраля 2019

Я пытаюсь преобразовать структуру данных pypng в массив numpy (с помощью PIL вы можете просто вызвать numpy.array (img), и он работает), но я не уверен, как это сделать с помощью pypng.Мне нужно работать с 48-битными изображениями, поэтому мне нужно использовать pypng.

Я адаптировал метод, предложенный в документах , к python3, но, похоже, он дает мне неправильный тип.

Есть мои попытки:

>>> import png
>>> reader = png.Reader('encoded_0000000.png')
>>> pngdata = reader.read()
>>> import numpy
>>> nparr = numpy.asarray(map(np.uint16, pngdata[2]))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'np' is not defined
>>> nparr = numpy.asarray(map(numpy.uint16, pngdata[2]))
>>> nparr.shape
()
>>> nparr
array(<map object at 0x0000015F758F8DD8>, dtype=object)
>>># ^ This seems to be an incorrect object type, not a 3D array 
>>> nparr = numpy.asarray(numpy.uint16, pngdata[2])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "D:\Miniconda3\envs\base\lib\site-packages\numpy\core\numeric.py", line 492, in asarray
    return array(a, dtype, copy=False, order=order)
TypeError: data type not understood
>>>
>>> nparr = numpy.asarray(pngdata[2], type=numpy.uint16)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: asarray() got an unexpected keyword argument 'type'
>>> nparr = numpy.asarray(pngdata[2], dtype=numpy.uint16)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "D:\Miniconda3\envs\base\lib\site-packages\numpy\core\numeric.py", line 492, in asarray
    return array(a, dtype, copy=False, order=order)
TypeError: int() argument must be a string, a bytes-like object or a number, not 'generator'
>>> nparr = numpy.asarray(pngdata[2], dtype=numpy.uint16)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "D:\Miniconda3\envs\base\lib\site-packages\numpy\core\numeric.py", line 492, in asarray
    return array(a, dtype, copy=False, order=order)
TypeError: int() argument must be a string, a bytes-like object or a number, not 'generator'
>>> nparr = numpy.asarray(pngdata, dtype=numpy.uint16)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "D:\Miniconda3\envs\base\lib\site-packages\numpy\core\numeric.py", line 492, in asarray
    return array(a, dtype, copy=False, order=order)
TypeError: int() argument must be a string, a bytes-like object or a number, not 'generator'
>>> pngdata
(512, 256, <generator object Reader.iter_bytes_to_values at 0x0000015F758DBAF0>, {'greyscale': False, 'planes': 3, 'bitdepth': 16, 'alpha': False, 'interlace': 0, 'size': (512, 256)})
...