오늘은 파이썬으로 이미지 다루기에 대해서 배웠다.
먼저 이번 노드를 진행하기 위한 프로그램을 설치해주고
$ pip install pillow opencv-python matplotlib
그 다음 이미지를 가져와보자
$ mkdir -p ~/aiffel/python_image_proc/data
$ ln -s ~/data/* ~/aiffel/python_image_proc/data
$ ls ~/aiffel/python_image_proc/data # 파일 확인
이미지 형식을 저장하는데 보편적으로 사용되는 방법은 RGB로 표시하는 방법이 있다.
하지만 이 방법뿐만 아니라 흑백에다 1/4의 해상도를 가진 두 색상 채널을 덧붙여서 송출하는
YUV방식도 있다.
또한 디지털 화면에서 색감을 수치적으로 조작할 때 조금 더 직관적으로 이해할 수 있는 HSV(Hue 색상, Saturation 채도, Value 명도)도 자주 사용된다.
이외에 인쇄 매체의 경우에는 색의 강도를 높일수록 어두워진다는 특성과, 또한 자주 사용되는 검은색을 표현할 때 각 색을 조합하면 잉크의 낭비가 심하다는 현실적인 이유 때문에, RGB가 아닌 CMYK(Cyan, Magenta, Yellow, Black) 네 가지 색상을 사용한다.
결과적으로 이미지는 배열 형태의 데이터라서 우리가 이전 가위바위보 익스노드를 했을 때
[32, 32, 3] 이런 형식의 차원 배열이 생성된다.
크기 32x32 컬러 3 이런식.
PILLOW 사용
먼저 pillow란 파이썬에서 이미지 처리를 위해 사용하는 라이브러리이다.
#- 문제 2 -#
from PIL import Image
import os
연습용 파일 경로
image_path = os.getenv('HOME')+'/aiffel/python_image_proc/data/pillow_practice.png'
이미지 열기
[[YOUR CODE]]
width와 height 출력
[[YOUR CODE]]
JPG 파일 형식으로 저장해보기
[[YOUR CODE]]
이러면 까만 점이 나온다.
예시로 한번 해보자.
from PIL import Image
import os
연습용 파일 경로
image_path = os.getenv('HOME')+'/aiffel/python_image_proc/data/pillow_practice.png'
이미지 열기
img = Image.open(image_path)
img
width와 height 출력
print(img.width)
print(img.height)
JPG 파일 형식으로 저장해보기
new_image_path = os.getenv('HOME')+'/aiffel/python_image_proc/data/jpg_pillow_practice.jpg'
img = img.convert('RGB')
img.save(new_image_path)
이러면 결과값으로 이게 뜬다 620 465
이것의 이미지 크기를 바꿔보자.
resized_image = img.resize((100,200))
resized_image_path = os.getenv('HOME')+'/aiffel/python_image_proc/data/pillow_practice_resized.png'
resized_image.save(resized_image_path)
resized_image
그러면 이미지 사이즈가 100x200이 된다.
마지막으로 원하는 부분을 잘라내고 싶을 땐 좌표를 이용해서 자르면 된다.
box = (300, 100, 600, 400)
region = img.crop(box)
cropped_image_path = os.getenv('HOME')+'/aiffel/python_image_proc/data/pillow_practice_cropped.png'
region.save(cropped_image_path)
region