일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 퍼셉트론
- 세계사
- 비트코인
- Training
- keras
- terminal
- numpy
- pyqt
- TF
- deeplearning
- Python
- itksnap
- opencv
- Inference
- error
- loss
- 브렉시트
- dtype
- qtdesigner
- 블록체인
- DataSet
- 세계대전
- cv2
- TensorFlow
- Perceptron
- TFRecord
- 유가 급등
- 딥러닝
- 유로화
- img
Archives
- Today
- Total
활연개랑
[numpy(넘파이)] python numpy array이미지 dtype변경 - float to uint 본문
반응형
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