[Python] 이미지 시각화의 기초 PIL, opencv활용

2020. 8. 26. 20:11Tip/Python

1-10. 시각화 기초 (이미지)

package 불러오기

In [1]:
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
%matplotlib inline

이미지 파일 열기

opencv로도 열수 있지만, 이미지를 좌표값의 수치형으로 변형했을 때, shape 순서가 바뀌는 경향이 많다. 그렇기에 PIL로 여는 것을 학습하고자한다.

In [2]:
path = 'source/dog.jpg'  

image_pil = Image.open(path)
image = np.array(image_pil)

이미지 들여다 보기

In [7]:
image.shape # 가로 734, 세로 1100, 3(RGB색상 조합)
Out[7]:
(734, 1100, 3)
In [5]:
np.max(image), np.min(image) # rgb 컬러는 0~255의 숫자 조합으로 이루어짐
Out[5]:
(255, 0)

이미지를 로드하고 shape 및 min, max를 통해서 이미지의 range 확인


그래프로 시각화 하기

In [9]:
plt.hist(image.ravel(), 256, [0,256])
# ravel() 함수는 numpy값을 1차원 벡터로 변환시키는 것이다. 
plt.show()

그림 나타내기

In [10]:
plt.imshow(image)
plt.show()

이미지 흑백으로 열기

In [15]:
image_bw = image_pil.convert('L')
image_bw = np.array(image_bw)
image_bw.shape  # ,3 (rgb색상)이 사라졌다. 즉, 흑백으로 변했다는 것이다.
Out[15]:
(734, 1100)

흑백 이미지 열기

In [16]:
# 흑백으로 보이지가 않는다. 
# 수치적으로 value가 높아질 수록 노란색 낮아질 수록 짙은 색으로 표현을 한 것이다. 
plt.imshow(image_bw)
plt.show()

다른 색상으로 cmap 표현하기

gray scale

In [18]:
# cmap을 통해서 흑백으로 볼 수 있다.
plt.imshow(image_bw, cmap='gray')
plt.show()

그 외의 색상

RdBu

In [10]:
plt.imshow(image_bw, 'RdBu')
plt.show()

jet

In [11]:
plt.imshow(image_bw, 'jet')
plt.show()

Colorbar 추가하기

In [12]:
plt.imshow(image_bw, 'jet')
plt.colorbar()
plt.show()

이미지 설정

이미지 보기 사이즈 조절

In [13]:
plt.figure(figsize=(10, 20))
plt.imshow(image)
plt.show()

이미지에 제목 추가

In [19]:
plt.title("Dog")
plt.imshow(image)
plt.show()

두번째 이미지 열기

In [20]:
path = 'source/cat.jpg'

image_pil = Image.open(path)
cat_image = np.array(image_pil)

두번쨰 이미지를 첫번째 이미지 모양에 맞추기

In [21]:
cat_image.shape
Out[21]:
(183, 275, 3)
In [22]:
plt.imshow(cat_image)
plt.show()

두번째 이미지 합치기 위한 준비

In [28]:
# opencv가 설치 안 되어있으면 설치를 할 필요가 있다. 
!pip install opencv-python  
Requirement already satisfied: opencv-python in c:\users\user\anaconda3\lib\site-packages (4.4.0.42)
Requirement already satisfied: numpy>=1.14.5 in c:\users\user\anaconda3\lib\site-packages (from opencv-python) (1.18.5)
In [31]:
import cv2

cat_image = cv2.resize(cat_image, \
                       (image.shape[1], image.shape[0]))    
                        # dog 사진의 크기와 동일하게 만든다.
                        # opencv에서 shape이 행과 열이 바뀌어 인식되어
                        # [1]->[0] 순서로 shape을 삽입하였다.

image.shape
Out[31]:
(734, 1100, 3)
In [33]:
cat_image.shape # 이미지 크기 변형 확인
Out[33]:
(734, 1100, 3)

Image 합치기

In [34]:
plt.imshow(image, alpha=0.8)
plt.imshow(cat_image, alpha=0.5)
plt.show()

Subplot

In [35]:
plt.figure(figsize=(10, 5))
plt.subplot(2, 2, 1)
plt.imshow(image)
plt.subplot(2, 2, 2)
plt.imshow(cat_image)
plt.subplot(2, 2, 3)
plt.imshow(image_bw, 'gray')
plt.show()
In [ ]: