2013-03-06 4 views
1

이미지의 각 픽셀의 RGB 값을 1 차원 배열로 가져 오는 방법은 무엇입니까?이미지의 각 픽셀의 RGB 값을 1 차원 배열로 가져 오기

from PIL import Image 
im = Image.open("bride.jpg") 
pix = im.load() 
print pix[x,y] 

이 반복 가능한 아닌 2 차원 배열을 가져옵니다

나는 다음과 같은 일을 사용하고 있습니다. 나는이 일을 1 차원 배열로 원한다. 당신이 NumPy와를 사용하는 경우

width, height = im.size 
pixels = [pix[i, j] for i in range(width) for j in range(height)] 
+0

를? 거기에 [많은 방법] (http://stackoverflow.com/questions/952914/making-a-flat-list-out-of-list-of-lists-in-python) 할 ... –

+0

그거 메서드는 반복을 지원해야합니다. 그러나 pix 배열은 그렇지 않습니다. –

+0

당신 말이 맞아요! 내 대답을 보라. –

답변

1

당신은 1 차원 배열로 픽셀을 평평하게 할 수 있습니다.

from PIL import Image 
import numpy as np 
im = Image.open("bride.jpg") 

pix_flatiter = np.asarray(im).flat # is an iterable 

전체 어레이에로드하려면, 당신은 할 수 있습니다 : 당신은 1 차원 배열로 2 차원 배열을 평평하게 할 것을 의미

pix_flat = np.asarray(im).flatten() # is an array 
+0

좋은 해결책이지만 원래 배열의 순서를 엉망으로 만들고 있습니다. 내가 원하는 1 차원 배열은 (2 차원 어레이의 행 번호로 가정)과 같아야합니다. 행 i는 그 행 뒤에 i + 1 행을 차례로 배열합니다. 컴파일러가 어떻게 작동하는지와 같습니다. –

+0

@VikasBansal : 원하는 순서를 이해하지 못합니다. '(0, 0), (0, 1), (0, 2) ... (1, 0), (1,1), (1, 2) ...' (0, 0), (1,0), (2, 0) ... (0,1), (1,1), (2, 1) ... ' –

+0

이렇게 : , (0, 1), (0, 2) ... (1,0), (1,1), (1, 2) ... –

1

쉽고, 필요 이미지를로드하지 않으려면 다음과 같이

관련 문제