2016-08-23 2 views
1

나는 다음과 같은 시도 저장 :그레이 스케일 NumPy와 배열로 사진을 읽고, 소스 이미지의 그레이 스케일 버전을 확인하는 기대가 다시

from PIL import Image 
import numpy as np 
img = Image.open("img.png").convert('L') 
arr = np.array(img.getdata()) 
field = np.resize(arr, (img.size[1], img.size[0])) 
out = field 
img = Image.fromarray(out, mode='L') 
img.show() 

을하지만 어떤 이유로, 전체 이미지는 꽤 많이있다 검은 색 점이 많이. 왜 그렇게됩니까?

답변

2

베개 개체의 이미지 데이터를 사용하여 numpy 배열을 만들 때 배열의 기본 정밀도는 int32입니다. 귀하의 데이터가 실제로는 uint8 인 것으로 가정하고 있습니다. 실제로는 대부분의 이미지가 이렇게 보입니다. 따라서 배열에 이미지에 표시된 것과 동일한 유형인지 명시 적으로 확인해야합니다. 간단히 말하면, 배열이 uint8인지 확인한 후에 이미지 데이터를 얻으십시오. 그러면 코드의 네 번째 라인이 이됩니다. 내가 처음에 코드에서 두 개 더 라인을 추가했습니다

arr = np.array(img.getdata(), dtype=np.uint8) # Note the dtype input 

1. 테이크 노트 (이미지 오프라인이기는하지만) 작업이 코드에 필요한 패키지를 가져옵니다.

+0

그렇지 않으면 numpy가 픽셀을 한 요소에 넣습니다. – RomaValcer

+0

그게 아니야. 회색 음영 값의 동적 범위는 매우 작으므로 실제 그림을 볼 수 없습니다. 또한, 이미지에 배치하기 위해 읽히는 바이트 순서는 녹색, 파랑 및 알파 데이터의 4 배가됩니다. – rayryeng

관련 문제