Chap.16-1 Pillow 이미지 처리[PIP] - PIP, 이미지 읽기/저장/화면 출력, 색상 변경, 썸네일 만들기, 이미지 부분 잘라내기, center_crop, 이미지 회전 및 Resize, 이미지 필터링, 이미지 ↔ numpy 배열
PIP
PIP, 이미지 읽기/저장/화면 출력, 색상 변경, 썸네일 만들기, 이미지 부분 잘라내기, center_crop, 이미지 회전 및 Resize, 이미지 필터링, 이미지 ↔ numpy 배열
PIP
-
파이썬 이미지 처리 라이브러리
-
pip install pillow
- 아나콘다에 기본 탑재되어 있음 -
기본 사용방법
>> pip install pillow # 터미널
프로젝트 폴더에 이미지파일 python.png 다운로드한 상태
이미지 읽기/저장/화면 출력
-
.open, .size, .save, .show
from PIL import Image # Image는 대문자로 시작하니 Class
# 이미지 열기
im = Image.open('python.png') # 스태틱 메서드 (팩토리 함수)
# 이미지 크기 출력(튜플)
print(im.size)
# 이미지 JPG로 저장
im.save('python.jpg')
# 이미지 화면 출력
im.show()
결과
(500, 333)
색상 변경
-
.convert
from PIL import Image
# convert : "L" (gray), "RGB", "RGBA", "CMYK"
im = Image.open('python.png').convert("L") # 메서드 체이닝
im.save('python-gray.jpg')
im.show()
결과
썸네일 만들기
-
.thumbnail
from PIL import Image
im = Image.open('python.png')
# Thumbnail 이미지 생성
size = (64, 64)
im.thumbnail(size) # 변수 im의 원본을 변경시킴
# 가로 세로 비율을 유지하면서 줄여줌(긴쪽에 맞춘다)
im.save('python-thumb.jpg')
im.show()
print(im.size)
결과
이미지 부분 잘라내기
-
.crop
from PIL import Image
im = Image.open('python.png')
cropImage = im.crop((100, 100, 150, 150)) # (좌, 상, 우, 하)
# 사진의 최 좌측상단이 원점이다.
# (x1, y1, x2, y2) -> 좌상단(x1, y1) 우하단(x2,y2)
cropImage.save('python-crop.jpg')
cropImage.show()
결과
center_crop
이미지 왜곡 없이 정사각형을 만드려면 잘라야한다.
가로 세로 중 짧은 쪽을 기준으로 가운데를 자른다.
함수로 만든다.
from PIL import Image
def center_crop(im):
crop_size = min(im.size)
left = (im.size[0] - crop_size)//2 # 몫을 구한다.
top = (im.size[1] - crop_size)//2
right = (im.size[0] + crop_size) // 2
bottom = (im.size[1] + crop_size) // 2
return im.crop((left, top, right, bottom)) # 튜플을 매개변수로
im = Image.open('python.png')
cropImage = center_crop(im)
cropImage.save('python-crop.jpg')
cropImage.show()
결과
정보 손실이 발생할 수 있다.
가로 세로 중 긴쪽을 기준으로 정사각형을 만들면 정보 손실이 없다. (채우는 부분은 디폴트 값)
How -> 정사각형을 만들고 가운데에 이미지를 덮어써준다.
이미지 회전 및 Resize
-
.resize, .rotate
from PIL import Image
im = Image.open('python.png')
# 크기를 600x600 으로
img2 = im.resize((600, 600))
img2.save('python-600.jpg')
img2.show()
# 90도 회전 (기존 사이즈에서 이미지만 반시계 방향으로 90도 회전)
img3 = im.rotate(90)
img3.save('python-rotate.jpg')
img3.show()
결과
이미지 필터링
-
.filter
from PIL import Image, ImageFilter
im = Image.open('python.png')
blurImage = im.filter(ImageFilter.BLUR) # 다른 필터는 검색해보자.
blurImage.save('python-blur.png')
결과
import ImageFilter
선명한 이미지는 컴퓨터가 처리하기에 안좋다. -> .filter(ImageFilter.BLUR)
이미지 ↔ numpy 배열
-
.array, .fromarray
numpy도 외부 라이브러리이다.
from PIL import Image
import numpy as np
im = Image.open('python.png')
# Image --> numpy array (3차원 데이터)
im2arr = np.array(im) # im2arr.shape: height x width x channel
print(im2arr.shape)
# numpy array --> Image
arr2im = Image.fromarray(im2arr)
결과
(333, 500, 3)
그냥 실행하면 ModuleNotFoundError: No module named 'numpy' 가 나온다.
>> pip install numpy
픽셀 단위의 작업을 할 때 사용
'인터페이스 개발 > Python' 카테고리의 다른 글
Python - 고급 문법[반복자] - 열거 가능 객체, 제너레이터 (0) | 2020.07.28 |
---|---|
Python - 가상환경[가상환경] - 모듈, 목록, 만들기, 활성화, 비활성화, 삭제 (0) | 2020.07.28 |
Python - 모듈과 패키지[패키지, 써드 파티 모듈] - 패키지, __init__.py, 모듈의 내부, dir() 함수, help() 함수, 외부 모듈 관리 pip (0) | 2020.07.28 |
Python - 모듈과 패키지[예제] - 주소록+메모장(2) (0) | 2020.07.28 |
Python - 모듈과 패키지[모듈] - 모듈, 모듈의 정의, 모듈의 사용, 모듈 테스트, 모듈 경로 (0) | 2020.07.28 |
댓글