728x90
이미지는 array이지만 현실 세계에서는 파일로 저장하고, 파일마다 형식이 다르게 존재하고 있음. 파일 형식에 따라 이미지를 다양한 값의 조합으로 구현함(확장자가 중요한 것은 아님)
제일 중요한 것은, 파일을 불러와서 해석할 수 있어야 함
# tensorflow - GPU
import tensorflow as tf
im = tf.io.read_file('moon.jpg')
t= tf.image.decode_image(im)
ss = tf.cast(t, 'float32')
ss/127.5 - 1 # -1 ~ 1로 만듦
# Opencv - CPU
import cv2
s = cv2.imread('moon.jpg)
s.dtype
>> dtype('uint8') #강도
python opencv는 numpy 기본으로 CPU로 vectorization을 하나 tensorflow는 GPU로 vectorization을 함. tensorflow는 대용량 데이터를 불러와서 처리를 하기 때문에 더 빠름. 프로세스는 동일하나 편의성 문제임.
이미지는 한정적(finite)으로 표현함. 연속적으로도 표현 가능.
사람은 상대적 강도로 인식을 하기 때문에 255로 나누나 가장 큰 값으로 나누는 것은 똑같이 인식을 하지만, 컴퓨터는 dtype()이 float로 변경됨
컬러는 상대적 강도, 값이 하나 밖에 없는 강도는 흑백로 컬러 이미지에서 채널 하나를 뽑으면 흑백이 됨
imshow는 default를 컬러 이미지로 봄. 흑백 이미지는 기본 colormap으로 표현하기 때문에 색 정보가 없으면 컬러 이미지로 생각함
import matplotlib
len(dir(matplotlib))
>> 101
import matplotlib.pyplot as plt
len(dir(matplotlib))
>> 160
plt.imshow(t[...,0], cmp='gray')
PIL의 경우 Pythonic한 라이브러리로 numpy 방식이 아닌 numpy 호환 형태로 데이터를 가지고 있음.
i = tf.keras.preprocessing.image.load_img('moon.jpeg')
# tensorflow, pytorch 내부적으로 PIL 사용
type(i)
>> PIL.JpegImagePlugin.JpegImageFile
# array 출력을 어떻게 할지 정하는 것
np.set_printpoints(formatter={'int':'{:>03d}'.format}, linewidth =80)
def visualized_bw(img):
w, h = img.shape
plt.figure(figsize=(10,10))
plt.imshow(img, cmap='binary')
for i in range(w):
for j in range(h):
x = img[j, i]
plt.annotate(x, xy=(j, i),
horizontalalignment='center',
verticalalignment='center',
color='black' if x < 128 else 'white')
visualized_bw(img)
728x90
'공부하는삶 > CV' 카테고리의 다른 글
[CS231n] Lecture 7 | Training Neural Networks II (0) | 2023.08.29 |
---|---|
Transfer Learning (0) | 2023.08.29 |
Numpy 데이터를 Tensor로 변환하는 법(Feat, Tensorflow) (0) | 2023.08.29 |
Data Pipeline (feat. Augmentation) (0) | 2023.08.29 |
WSL2 설치하기 (0) | 2021.03.26 |
R-CNN부터 Mask R-CNN까지 참고 자료들 (0) | 2019.12.03 |