본문 바로가기

Dev/PYTHON 파이썬

[Python] 여러 장의 이미지를 numpy 배열로 로드 (image to numpy)

728x90

오늘은 이미지를 다루는 Pillow 라이브러리와

수치 연산에 자주 사용하는 numpy 라이브러리를 사용하여

여러장의 이미지를 numpy 배열로 로드하는 방법을 소개하도록 하겠습니다

 

#라이브러리 설치
!pip install Pillow

Pillow 라이브러리를 설치해줍니다

만약 numpy 라이브러리가 설치되어 있지 않다면, numpy 라이브러리도 설치해줍니다

 

#라이브러리 호출
import os
import numpy as np
from PIL import Image

사용할 라이브러리를 호출합니다

 

#변환할 이미지 목록 불러오기
image_path = './dataset/video1_trim/'

img_list = os.listdir(image_path) #디렉토리 내 모든 파일 불러오기
img_list_jpg = [img for img in img_list if img.endswith(".jpg")] #지정된 확장자만 필터링

print ("img_list_jpg: {}".format(img_list_jpg))

사용할 이미지 목록을 불러옵니다

저는 여러장의 이미지를 numpy로 변환할 예정이기 때문에

디렉토리 내에 jpg로 끝나는 모든 파일들을 불러오도록 합니다

 

img_list_np = []

for i in img_list_jpg:
    img = Image.open(image_path + i)
    img_array = np.array(img)
    img_list_np.append(img_array)
    print(i, " 추가 완료 - 구조:", img_array.shape) # 불러온 이미지의 차원 확인 (세로X가로X색)
    #print(img_array.T.shape) #축변경 (색X가로X세로)

이미지를 numpy형태로 변환하여 저장할 빈 리스트를 하나 생성합니다

 

앞서 저장한 이미지들을 for문을 돌면서

하나씩 접근하여 Image로 열고, np.array를 사용하여 numpy 형태로 변환합니다

그리고 이를 앞서 생성한 빈 리스트에 추가합니다

 

img_np = np.array(img_list_np) #리스트를 numpy로 변환
print(img_np.shape)

모든 이미지들을 추가하였다면, 리스트 전체를 numpy 형태로 변환합니다

최종적으로 여러장의 이미지를 numpy 형태로 저장할 수 있게 됩니다.

 


 

하지만 이 포스팅에서 소개한 방법은 상당히 나이브한 방법이고

OpenCV를 사용하여 좀더 쉽게 로드할 수도 있습니다

이외에도 더 다양한 방법이 있는데, 이는 다음에 소개하도록 하겠습니다

 

더 좋은 방법이나 포스트에서 고쳐야할 것이 있다면 댓글로 알려주세요 :)

 

 

728x90