2020-09-23 23:43:25

(M, N, 3) 형태의 넘파이행렬을 (M*N, 3)의 형태로 바꾸고 싶을 때는 어떻게 해야할까요? 뭐 반복문을 쓰고 이래저래하면 할 수 있겠지만, 그것보다는 좀 더 간단한 방법이 있을 것 같습니다. 

 

(M, N, 3)의 형태를 가졌다면 보통 컬러 이미지를 담고 있는 배열입니다. 그래서 이 배열의 이름을 img라고 하겠습니다. img라는 이름을 가진 배열의 형태를 (M*N, 3)의 형태로 바꾸기 위해서는

 

reshaped_img = img.reshape(-1, 3) 

 

한 줄의 코드면 됩니다. (300, 500, 3) 형태의 넘파이 배열 img에 대해 위 코드를 실행하면,

 

[[B1, G1, R1], 

 [B2, G2, R2],

 [B3, G3, R3],

 ...,

 [B150000, G150000, R150000]]

 

와 같이 형태가 바뀝니다. (150000, 3) 형태의 넘파이 배열이 됩니다. 

 

1
2
3
4
5
6
7
import cv2
 
img = cv2.imread('test.jpg', cv2.IMREAD_COLOR)
print(img.shape)
 
reshaped_img = img.reshape(-13)
print(reshaped_img.shape)
cs

 

위 코드 실행 결과

 

 

<참고자료>

[1] stackoverflow, "Reshape (M, N, 3) numpy array to (M*N, 3)"