이미지 파일을 불러와 넘파이 배열로 만들어주는 함수
def read_image(image_path):
# 이미지 파일을 바이트로 읽어옵니다.
with open(image_path, 'rb') as f:
# 텍스트 파일이 아니므로 rb, 즉 이진 코드로 읽어온다.
# 만약 이미지가 PNG 형식이고, pyspng 라이브러리가 설치되어 있다면
if pyspng is not None and image_path.endswith('.png'):
# pyspng를 사용하여 PNG 이미지를 읽어옵니다.
image = pyspng.load(f.read())
else:
# 그 외의 경우에는 PIL 라이브러리를 사용하여 이미지를 NumPy 배열로 읽어옵니다.
image = np.array(PIL.Image.open(f))
# 만약 이미지가 흑백이라면, 색상 채널을 추가하여 RGB 형식으로 변경합니다.
if image.ndim == 2:
image = image[:, :, np.newaxis] # HW => HWC
image = np.repeat(image, 3, axis=2)
# 이미지의 차원 순서를 변경하여 CHW 형식으로 만듭니다.
image = image.transpose(2, 0, 1) # HWC => CHW
# RGB 채널만 선택합니다.
image = image[:3]
return image
넘파이 배열을 이미지로 다시 바꿔주는 함수
def to_image(image, lo, hi):
# 이미지를 NumPy 배열로 변환하고 데이터 타입을 float32로 설정합니다.
image = np.asarray(image, dtype=np.float32)
# 이미지를 lo에서 hi로 정규화합니다.
image = (image - lo) * (255 / (hi - lo))
# 소수점을 반올림하고, 0에서 255 사이의 값으로 클리핑한 후 uint8로 변환합니다.
image = np.rint(image).clip(0, 255).astype(np.uint8)
# 이미지의 차원 순서를 변경하여 HWC 형식으로 만듭니다.
image = np.transpose(image, (1, 2, 0))
# 이미지가 흑백이면, 색상 채널을 추가하여 RGB 형식으로 변경합니다.
if image.shape[2] == 1:
image = np.repeat(image, 3, axis=2)
# 최종적으로 이미지를 반환합니다.
return image
'전공 공부 > 파이썬 기초' 카테고리의 다른 글
VSCode 디버깅 설정 (0) | 2024.01.22 |
---|---|
(*args, **kwargs)의 의미 (0) | 2023.10.13 |
모델의 gradient update 여부를 결정하는 함수 (0) | 2023.10.03 |
모델 가중치 초기화 (1) | 2023.10.03 |
make_dataset 함수 (1) | 2023.10.02 |