활연개랑

[numpy(넘파이)] python numpy array이미지 dtype변경 - float to uint 본문

Python

[numpy(넘파이)] python numpy array이미지 dtype변경 - float to uint

승해tmdhey 2022. 5. 25. 11:13
반응형

numpy array로 되어있는 이미지에 다짜고짜 astype을 써버리면 이미지를 강제로 타입 변경 해버리는 것이기 때문에, 이미지에 손실이 있을 수 있습니다.

따라서 dtype을 변경하고 싶을 때에는 해당 이미지 타입에 맞는 계산법에 따라 계산해준 후 type을 변경해 주어야 합니다.

 

원본 이미지의 dtype이 float64일 경우, 이미지를 normalize해준 후 255로 곱해주면서 uint8에 맞는 값을 갖도록 합니다.

그 후에 astype으로 타입변경을 하시면 이미지 손상을 최소화하며 타입변경이 가능합니다.

또한 다시 되돌릴 경우에는 전에 해준 방법을 그대로 되돌리는 계산과 타입변경을 해주시면 됩니다.

코드는 float64 to unit8의 예시입니다. 

min_or = img.min()
max_or = img.max()
img_uint = ((img - min_or) / (max_or - min_or) * 255.).astype(np.uint8)  # change type
img = ((img_uint / 255. * (max_or - min_or)) + min_or).astype(np.float64)  # return org type