python코드 복사
def _load_img_as_tensor(img_path, image_size):
img_path: 이미지 파일의 경로입니다.image_size: 이미지를 리사이즈할 크기입니다. 결과적으로 이미지의 크기는 image_size x image_size가 됩니다.이미지 로드:
python코드 복사
img_pil = Image.open(img_path)
img_pil은 PIL 이미지 객체가 됩니다.이미지 리사이즈 및 RGB 변환:
python코드 복사
img_np = np.array(img_pil.convert("RGB").resize((image_size, image_size)))
이미지 정규화:
python코드 복사
if img_np.dtype == np.uint8:
img_np = img_np / 255.0
else:
raise RuntimeError(f"Unknown image dtype: {img_np.dtype} on {img_path}")
np.uint8 타입의 데이터는 0-255 범위의 값을 가지므로, 이를 0-1 범위로 정규화합니다.np.uint8이 아니면, 에러를 발생시킵니다.텐서로 변환:
python코드 복사
img = torch.from_numpy(img_np).permute(2, 0, 1)
permute(2, 0, 1)을 사용하여 이미지의 채널 순서를 (H, W, C)에서 (C, H, W)로 변경합니다. PyTorch에서는 (C, H, W) 형식의 텐서를 사용하기 때문입니다.원본 이미지 크기 반환:
python코드 복사
video_width, video_height = img_pil.size
img_pil.size에서 video_width와 video_height를 추출합니다.결과 반환:
python코드 복사
return img, video_height, video_width
img: 정규화된 이미지 텐서 (C, H, W) 형식.video_height: 원본 이미지의 높이.video_width: 원본 이미지의 너비.python코드 복사
img_tensor, height, width = _load_img_as_tensor("/path/to/image.jpg", 256)
위 코드는 /path/to/image.jpg 경로에 있는 이미지를 256x256 크기로 리사이즈하고, 정규화된 텐서로 변환한 후, 원본 이미지의 높이와 너비를 반환합니다.
이 함수는 특히 비디오 프레임이나 이미지 데이터를 PyTorch 모델에서 사용하기 전에 필요한 전처리 작업을 수행하는 데 유용합니다.