Вместо:
newimg.putdata(imgData)
вам нужна строка:
newimg.putdata([j[0] for i in imgData for j in i])
Данные в градациях серого указаны в 1d списке, а не в 2d списке.
Это создает список:
>>> [j[0] for i in imgData for j in i]
[255, 255, 255, 255, 0, 255, 255, 0, 255, 255, 0, 255, 255, 255, 255]
Что означает:
[255, 255, 255,
255, 0 , 255,
255, 0 , 255,
255, 0 , 255,
255, 255, 255]
РЕДАКТИРОВАТЬ Приведенное выше решение работает, если вы редактируете imgData
с помощью imgData[0][0] = [0, 0, 0, 255]
. Если вы редактируете imgData
с помощью imgData[0][0] = 0
, тогда вам понадобится строка:
[j[0] if hasattr(j, '__iter__') else j for i in imgData for j in i]
или вы можете сделать ее лучше:
imgData = np.array([[j[0] for j in i] for i in imgData])
imgData[0][0] = 0
newimg.putdata(imgData.flatten())