상위 목록: 하위 목록: 작성 날짜: 읽는 데 8 분 소요

OpenCV 적용하기

OpenCVtkinter를 결합해 GUI로 표시할 수 있습니다.

이때 PIL 라이브러리를 활용합니다.

PIL 모듈은 Python Imaging Library로, 다양한 이미지 파일 형식을 지원하는 범용 라이브러리입니다.



OpenCV & PIL

import cv2
import tkinter
from PIL import Image
from PIL import ImageTk

def convert_to_tkimage():
    global src

    gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
    _, binary = cv2.threshold(gray, 100, 255, cv2.THRESH_BINARY)

    img = Image.fromarray(binary)
    imgtk = ImageTk.PhotoImage(image=img)

    label.config(image=imgtk)
    label.image = imgtk

window=tkinter.Tk()
window.title("YUN DAE HEE")
window.geometry("640x480+100+100")

src = cv2.imread("giraffe.jpg")
src = cv2.resize(src, (640, 400))

img = cv2.cvtColor(src, cv2.COLOR_BGR2RGB)

img = Image.fromarray(img)
imgtk = ImageTk.PhotoImage(image=img)

label = tkinter.Label(window, image=imgtk)
label.pack(side="top")

button = tkinter.Button(window, text="이진화 처리", command=convert_to_tkimage)
button.pack(side="bottom", expand=True, fill='both')

window.mainloop()


import cv2
import tkinter
from PIL import Image
from PIL import ImageTk


상단에 from PIL import Image, from PIL import ImageTk를 사용하여 PIL 모듈을 포함시킵니다.

OpenCVnumpy 형식 이미지를 표시하려면 PIL 모듈을 사용합니다.


img = cv2.cvtColor(src, cv2.COLOR_BGR2RGB)

tkinter의 색상 체계는 OpenCV와 다르게 RGB 패턴을 사용합니다.

그러므로, BGR에서 RGB로 변환합니다.


img = Image.fromarray(img)
imgtk = ImageTk.PhotoImage(image=img)

PIL.Image 모듈의 fromarray 함수를 활용해 Numpy 배열을 Image 객체로 변환합니다.

PIL.ImageTk 모듈의 PhotoImage 함수를 활용해 tkinter와 호환되는 객체로 변환합니다.


label=tkinter.Label(window, image=imgtk)
label.pack(side="top")

라벨(Label)image 매개변수에 imgtk를 적용해 이미지를 표시할 수 있습니다.


button=tkinter.Button(window, text="이진화 처리", command=convert_to_tkimage)
button.pack(side="bottom", expand=True, fill='both')

버튼(Button)command 매개변수에 convert_to_tkimage 함수를 실행시킵니다.


def convert_to_tkimage():
    global src

    gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
    _, binary = cv2.threshold(gray, 100, 255, cv2.THRESH_BINARY)

    img = Image.fromarray(binary)
    imgtk = ImageTk.PhotoImage(image=img)

    label.config(image=imgtk)
    label.image = imgtk

global src를 적용해 src 변수를 가져옵니다.

이진화를 처리한 다음, 앞의 형식과 동일하게 tkinter와 호환되는 이미지로 변환합니다.

이미지를 갱신하기 위해 config를 통해 image 매개변수를 설정합니다.

또한, 가비지 컬렉터(garbage collector)가 이미지를 삭제하지 않도록 라벨의 image 매개변수에 imgtk한 번 더 등록합니다.



출력 결과

댓글 남기기