영상처리 Chap01_그림불러오기/화면출력/저장하기
- Pillow의 Image 모듈 사용
- Pillow API : https://pillow.readthedocs.io/en/stable/index.html
- PIL의 Image 사용하여 열기
123456from PIL import Imageimport matplotlib.pyplot as pltim = Image.open("./images/whale.jpg")plt.imshow(im)
- Image.convert() 함수를 사용하여 Grayscale로 변환하기
123456789101112131415from PIL import Imageimport matplotlib.pyplot as pltim = Image.open("./images/whale.jpg")im_g = im.convert('L')plt.figure(figsize=(10, 5))plt.subplot(1,2,1)plt.axis('off')plt.imshow(im)plt.subplot(1,2,2)plt.axis('off')plt.imshow(im_g, cmap='gray')
- API 설명 : https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL.Image.Image.convert
- mode 종류 : 1, L, P, RGB, RGBA, CMYK, YCbCr, LAB, HSV, I, F
- Image.resize() 함수를 사용하여 그림 크기 변환하기
12345678910from PIL import Imageimport matplotlib.pyplot as pltim = Image.open('./images/whale.jpg')im_large = im.resize((im.width // 20, im.height // 20), Image.BILINEAR)print((im.width, im.height), (im_large.width, im_large.height))plt.figure(figsize=(10, 5))plt.subplot(1, 2, 1); plt.imshow(im)plt.subplot(1, 2, 2); plt.imshow(im_large)
- API 설명 : https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL.Image.Image.resize
- Image.resize(size, resample=None, box=None, reducing_gap=None)
- size = (width, height)
- resample : PIL.Image.NEAREST, PIL.Image.BOX, PIL.Image.BILINEAR, PIL.Image.HAMMING, PIL.Image.BICUBIC, PIL.Image.LANCZOS
- Image.split() 함수를 사용하여 그림을 채널별로 나누기
123456789101112131415from PIL import Imageimport matplotlib.pyplot as pltim = Image.open('./images/whale.jpg') #open imager, g, b = im.split() # img는 RGB#im2 = im.convert("RGBA") # convert to RGBA#r, g, b, a = im2.split() # img2는 RGBAplt.figure(figsize=(10, 6))plt.subplot(2, 2, 1); plt.axis('off'); plt.imshow(im)plt.subplot(2, 2, 2); plt.axis('off'); plt.imshow(r, cmap=plt.cm.Reds)plt.subplot(2, 2, 3); plt.axis('off'); plt.imshow(g, cmap=plt.cm.Greens)plt.subplot(2, 2, 4); plt.axis('off'); plt.imshow(b, cmap=plt.cm.Blues)
- API 설명 : https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL.Image.Image.split
- 읽어온 그림이 RGB나 HSV와 같이 채널이 3개면 3개값 리턴,
- RGBA와 같이 채널이 4개면 4개값 리턴
- scikit-image(skimage) 라이브러리 사용
- skimage API : https://scikit-image.org/docs/stable/api/api.html
- PIL의 Image 사용하여 열기
123456from skimage.io import imreadimport matplotlib.pyplot as pltim = imread("./images/whale.jpg")plt.imshow(im)
- color.rgb2gray() 함수를 사용하여 Grayscale로 변환하기
1234567891011121314151617from skimage.io import imreadfrom skimage.color import rgb2grayimport matplotlib.pyplot as pltim = imread("./images/whale.jpg")im_g = rgb2gray(im)plt.figure(figsize=(10, 5))plt.subplot(1,2,1)plt.axis('off')plt.imshow(im)plt.subplot(1,2,2)plt.axis('off')plt.imshow(im_g, cmap='gray')
- transform.resize() 함수를 사용하여 그림 크기 변환하기
123456789101112from skimage.io import imreadfrom skimage.transform import resizeimport matplotlib.pyplot as pltim = imread("./images/whale.jpg")im_large = resize(im, (im.shape[0] // 20, im.shape[1] // 20))print(im.shape, im_large.shape)plt.figure(figsize=(10, 5))plt.subplot(1, 2, 1); plt.imshow(im)plt.subplot(1, 2, 2); plt.imshow(im_large)
- numpy array를 나누어 그림을 채널별로 나누기
12345678910111213from skimage.io import imreadimport matplotlib.pyplot as pltim = imread("./images/whale.jpg")r, g, b = im[:,:,0], im[:,:,1], im[:,:,2] # img는 RGB#r, g, b = im[:,:,0], im[:,:,1], im[:,:,2], im[:,:,3] # img는 RGBAplt.figure(figsize=(10, 6))plt.subplot(2, 2, 1); plt.axis('off'); plt.imshow(im)plt.subplot(2, 2, 2); plt.axis('off'); plt.imshow(r, cmap=plt.cm.Reds)plt.subplot(2, 2, 3); plt.axis('off'); plt.imshow(g, cmap=plt.cm.Greens)plt.subplot(2, 2, 4); plt.axis('off'); plt.imshow(b, cmap=plt.cm.Blues)
-
함수를 사용하지 않고 직접 처리하기
- RGB 영상을 Grayscale로 변환하기
123456789101112131415161718192021from skimage.io import imreadimport matplotlib.pyplot as pltfrom PIL import Imageimport numpy as npim = imread("./images/whale.jpg")im_g = im[:,:,0] * 0.299 + im[:,:,1] * 0.587 + im[:,:,2] * 0.114im_g = np.clip(im_g, 0, 255)plt.figure(figsize=(10, 5))plt.subplot(1,2,1)plt.axis('off')plt.imshow(im)plt.subplot(1,2,2)plt.axis('off')plt.imshow(im_g, cmap='gray')print(im.shape, im_g.shape)
- RGB 영상을 Grayscale로 변환하기