간단한 문제가 있지만 좋은 해결책을 찾을 수 없습니다.
회색조 이미지를 나타내는 NumPy 2D 배열을 가져 와서 일부 matplotlib 컬러 맵을 적용하면서 RGB PIL 이미지로 변환하고 싶습니다.
다음 pyplot.figure.figimage
명령 을 사용하여 합리적인 PNG 출력을 얻을 수 있습니다 .
dpi = 100.0
w, h = myarray.shape[1]/dpi, myarray.shape[0]/dpi
fig = plt.figure(figsize=(w,h), dpi=dpi)
fig.figimage(sub, cmap=cm.gist_earth)
plt.savefig('out.png')
내가 원하는 것을 얻기 위해 이것을 조정할 수는 있지만 (아마도 StringIO를 사용하면 PIL 이미지를 얻습니다) 이미지 시각화의 매우 자연스러운 문제로 보이므로 더 간단한 방법이 없는지 궁금합니다. 다음과 같이 가정 해 보겠습니다.
colored_PIL_image = magic_function(array, cmap)
답변
꽤 바쁜 한 줄이지 만 여기에 있습니다.
- 먼저 NumPy 배열
myarray
이에서 최대 값으로 정규화 되었는지 확인합니다1.0
. - 에 컬러 맵을 직접 적용합니다
myarray
. 0-255
범위로 재조정하십시오 .- 를 사용하여 정수로 변환합니다
np.uint8()
. - 사용
Image.fromarray()
.
그리고 완료되었습니다.
from PIL import Image
from matplotlib import cm
im = Image.fromarray(np.uint8(cm.gist_earth(myarray)*255))
와 함께 plt.savefig()
:
와 함께 im.save()
:
답변
- 입력 = numpy_image
- np.unit8-> 정수로 변환
- convert ( ‘RGB’)-> RGB로 변환
-
Image.fromarray-> 이미지 객체를 반환합니다.
from PIL import Image import numpy as np PIL_image = Image.fromarray(np.uint8(numpy_image)).convert('RGB') PIL_image = Image.fromarray(numpy_image.astype('uint8'), 'RGB')
답변
수락 된 답변에 설명 된 방법은 의견에 언급 된 변경 사항을 적용한 후에도 작동하지 않았습니다. 그러나 아래의 간단한 코드가 작동했습니다.
import matplotlib.pyplot as plt
plt.imsave(filename, np_array, cmap='Greys')
np_array는 0..1 floats o2 0..255 uint8의 값을 가진 2D 배열 일 수 있으며,이 경우 cmap이 필요합니다. 3D 배열의 경우 cmap은 무시됩니다.