-
Python: Pillow 라이브러리 정리(이미지 편집, 이미지 필터, tkinter활용)Python 2021. 5. 2. 21:33
pillow는 이미지 편집을 위한 라이브러리
1. 이미지 크기와 포멧정보 보기
from PIL import Image img = Image.open('gif/panda.gif') print(img.size) # (900, 1000)의 크기로 출력 print(img.format) # gif 포멧으로 출력
2. 이미지 잘라내기
from PIL import Image img = Image.open('gif/panda.gif') print(img.size) print(img.format) # 이미지 잘라내기 xy = (100, 200, 600, 700) # (100, 200), (600, 700)을 지나는 직사각형으로 자른다. crop_img = img.crop(xy) # crop 메서드를 이용해서 자른다. crop_img.show() # 이미지를 띄운다.
(100, 200)과 (600, 700)을 지나는 사각형으로 crop하기
3. 이미지 병합하기
from PIL import Image img = Image.open('gif/panda.gif') print(img.size) print(img.format) # 이미지 잘라내기 xy = (100, 200, 600, 700) # (100, 200)~ (600, 700) crop_img = img.crop(xy) crop_img.show() # 이미지 붙여넣기 xy = (0, 0, 500, 500) img.paste(crop_img, xy) # xy에 자른 이미지를 병합한다. img.show()
자른 이미지를 (0, 0)과 (500, 500)을 잇는 사각형안에 붙혀넣기
참고로 붙여 넣는 이미지의 크기와 원래이미지의 크기가 같아야 한다.
4. 이미지 회전, 리사이즈, 뒤집기
1) 이미지 회전
from PIL import Image img = Image.open('gif/panda.gif') img_r = img.rotate(90) # 시계 반대방향으로 90도회전 img_r.show()
2) 이미지 리사이즈
from PIL import Image img = Image.open('gif/panda.gif') img_s = img.resize((500, 500)) img_s.show()
500 x 500 사이즈로 지정
3) 이미지 뒤집기
from PIL import Image img = Image.open('gif/panda.gif') img_opp = img.transpose(Image.FLIP_TOP_BOTTOM) # 이미지 대칭이동 img_opp.show()
FLIP_LEFT_RIGHT = 좌우반전
FLIP_TOP_BOTTOM = 상하반전
5. RGB처리하기
1) rgb값 잘라내기
# RGB처리하기 from PIL import Image img = Image.open('gif/panda.gif') # split을 이용하여 r, g, b값을 잘라낸다. r, g, b = img.split() r.show() g.show() b.show()
split을 이용하여 r, g, b값을 잘라낸다.
2) rgb merge하기
r, g, b 순서에 따라 여러가지 조합이 나온다.
# merge이용해서 rgb합치기 from PIL import Image img = Image.open('gif/panda.gif') r, g, b = img.split() RGB_img = Image.merge("RGB", (b, g, r)) # 다양한 순서쌍을 만들수 있다. # (r, g, b), (r, b, g), (r, r, g)... RGB_img.show()
6. 필터 씌우기
<필터링 속성>
# 이미지 필터 씌우기 from PIL import Image from PIL import ImageFilter img = Image.open('gif/panda.gif') img1 = img.filter(ImageFilter.BLUR) img2 = img.filter(ImageFilter.EMBOSS) img3 = img.filter(ImageFilter.CONTOUR) img1.show() img2.show() img3.show()
7. tkinter에 이미지 띄우기
tkinter가 뭔지 궁금하다면?
pillow는 tkinter를 이용할 수 있도록 클래스를 지원한다.
canvas는 선, 다각형, 원등을 그리기 위한 캔버스를 생성한다.
1) canvas 사용하기
# tkinter에 이미지 띄우기 from PIL import Image, ImageTk import tkinter root = tkinter.Tk() canvas = tkinter.Canvas(root, width=1200, height=867) # canvas를 생성 canvas.pack() img = Image.open('gif/panda.gif') img_tk = ImageTk.PhotoImage(img) # 위젯들의 공간에 이미지 설정 canvas.create_image(600, 300, image=img_tk) # (600, 300) 위치에 이미지를 생성한다. root.mainloop()
(tkinter에도 imageTk 메서드가 있으므로 구분해서 사용한다)
2) RGB picker 만들기
이미지의 일정 부분을 클릭하면 해당 부분의 RGB 값을 출력하는 프로그램을 만든다.
# rgb picker import tkinter from PIL import Image, ImageTk def click(event): # 클릭이벤트 처리하는 함수 print("클릭 위치:", event.x, event.y) # 클릭위치 출력 r, g, b = img.getpixel((event.x, event.y)) # 클릭한 위치의 픽셀 값을 얻어온다. print("R:{} G:{} B:{}".format(r, g, b)) root = tkinter.Tk() # tkinter 객체 만들어주기 cv = tkinter.Canvas(root, width=1000, height=1000) # 캔버스 생성 cv.bind("<Button>", click) # 캔버스에 마우스 클릭 바인딩 해주기 cv.pack() img = Image.open('gif/panda.gif') # 이미지 가져오기 img_tk = ImageTk.PhotoImage(img) # 이미지 위젯 만들기 cv.create_image(250, 250, image=img_tk) # 캔버스위에 이미지 올리기 root.mainloop()
반응형'Python' 카테고리의 다른 글
Python: matplot 라이브러리 정리 (선, 막대, 산포도, 파이, 히스토그램) (0) 2021.05.31 Python: numpy 라이브러리 정리(indexing, slicing, 정규분포 난수) (0) 2021.05.30 Python: Window programming Tkinter 라이브러리 정리 2 (0) 2021.04.16 Python: Window programming Tkinter 라이브러리 정리 1 (0) 2021.04.09 Python: 클래스, 멀티스레딩, 멀티프로세싱(Class, Multi threading, Multi Processing) 참고 (0) 2021.04.03