2017-05-08 2 views
2

RGB 형식이나 그레이 스케일 형식의 이미지가 있습니다. (Gimp를 통해 변환했습니다.) 이제 이미지를 그레이 스케일로로드 할 때마다 또는 그레이 스케일 형식으로 변환 할 때마다 셰이프는 항상 [높이, 너비]라고 말합니다. 3 차원 (색상 채널 수)흑백 이미지를 파이썬에서 3 차원 배열로 변환하는 방법은 무엇입니까?

나는 보통 B/W 이미지와 같은 형식으로 저장되는 것을 알고 있지만, 내가 특별히의 말을하자의 [height, width, 1] 이미지의 모양, 당신이 얻을 것 중 하나가 필요합니다

numpy.zeros(shape=[400, 400, 1]) 
+0

당신을위한 게시 솔루션 작업 중 하나를 했습니까? – Divakar

+1

예, 두 솔루션 모두 작동했습니다. 그 중 하나를 착신 전환으로 표시하는 것을 잊었습니다. 알림을 보내 주셔서 감사합니다! – danchy

답변

2

당신은 항상 "추가 비어 있습니다

>>> a2d = np.ones((100, 200)) 
>>> a3d = np.expand_dims(a, axis=2) 
>>> a3d.shape 
(100, 200, 1) 

또는 None 또는 np.newaxis로 슬라이싱 기준 : "사이즈 np.expand_dims를 사용

>>> a2d[..., None].shape # instead of "..." (Ellipsis) you could also use `[:, :, None]` 
(100, 200, 1) 
012,351,

나는 슬라이싱보다 어떤 일이 일어나는지 조금 더 분명하기 때문에 np.expand_dims을 선호합니다. 조건부을해야하는 경우, arr.ndim 첫째을 위해


을 확인하십시오

if arr.ndim == 2: 
    arr = np.expand_dims(arr, axis=2) 
2

는 내장 np.atleast_3d 바로이 목적을 위해있다 -

np.atleast_3d(img) 

이 내장이 돌봐 2D 배열에 대해 하나의 새 축을 마지막으로 추가하여 출력 모양을 3D으로 유지하고 3D 입력. 모두 후드 아래에서 처리됩니다.

샘플 실행 -

In [42]: img = np.random.randint(0,255,(800,600)) # grayscale img 

In [43]: np.atleast_3d(img).shape 
Out[43]: (800, 600, 1) 

In [44]: img = np.random.randint(0,255,(800,600,3)) # RGB img 

In [45]: np.atleast_3d(img).shape 
Out[45]: (800, 600, 3) 
+0

나는 단지'np.array (img, ndmin = 3, copy = False)'를 시도했으나 단지 치수를 앞에 붙입니다. 그들이 치수를 추가하는 또 다른 기능을 가지고 있다는 것을 알고 있습니다. :) – MSeifert

+0

"그걸 두포 밑에 두려워하는"또 다른 것은 잘못 들린다. 당신은 "그걸 처리합니다 ..."라는 뜻 이었습니까? – MSeifert

+1

@MSeifert 단어가 부족합니다. 더 의미있게 편집되었습니다. – Divakar