2017-11-14 2 views
2

Image.fromarray을 사용하여 백분율 매트릭스를 회색 음영 이미지로 저장하려고합니다. 그것은 임의의 행렬에서 작동하는 것으로 보이지만 특정 행렬 (원이 표시되어야하는 곳)에서는 작동하지 않습니다. 아무도 내가 뭘 잘못 설명 할 수 있습니까?Image.fromarray가 검은 색 이미지를 생성합니다.

from PIL import Image 
import numpy as np 
radius = 0.5 
size = 10 
x,y = np.meshgrid(np.linspace(-1,1,size),np.linspace(-1,1,size)) 
f = np.vectorize(lambda x,y: (1.0 if x*x + y*y < radius*radius else 0.0)) 
z = f(x,y) 
print(z) 
zz = np.random.random((size,size)) 
img = Image.fromarray(zz,mode='L') #replace z with zz and it will just produce a black image 
img.save('my_pic.png') 
+0

255로 크기를 조정하고'uint8/16' dtypes를 사용해야합니다. – Divakar

+0

그러나'zz'는 0과 1 사이의 값을 갖는 행렬이기도하며 괜찮습니다. – flawr

+0

'zz'가 작동하지만'z'는 작동하지 않는다고 말하는가? – Divakar

답변

2

는 부동 소수점 입력으로 잘못 정의됩니다. 잘 문서화되어 있지는 않지만 함수는 입력이 부호없는 8 비트 정수로 배열되어 있다고 가정합니다.

당신이 얻을하려는 출력을 생성하려면 255을 곱과 uint8로 변환 :

z = (z * 255).astype(np.uint8) 

는 IT가 무작위로 배열 작동하는 것 같다 이유는이 배열에 바이트를 해석하는 때입니다 부호없는 8 비트 정수로도 무작위로 보입니다. 이 문제 때문에

np.random.seed(0) 
zz = np.random.rand(size, size) 
Image.fromarray(zz, mode='L').save('pic1.png') 

pic1.png

Image.fromarray((zz * 255).astype('uint8'), mode='L').save('pic2.png') 

pic2.png

:하지만, 출력은 랜덤 입력에 상기 변환을 수행하여 확인할 수있는 입력과 같은 임의의 배열이 아닌 어디서나보고되지 않는 것 같습니다. https://github.com/python-pillow/Pillow/issues/2856

+0

설명과 솔루션을 제공해 주셔서 감사합니다! – flawr

관련 문제