OpenCV/OpenCV 관련 잡다한 지식

OpenCV 한글 출력 깨짐 해결법(feat. PIL활용)

KALILIVE 2020. 10. 4. 12:28
반응형

한글을 출력하려고 하면 아래 그림과 같이 깨져버리는 것을 확인할 수 있다.

text="Hello OpenCV!(한글)"

이제부터 한글 깨짐을 해결해 보자.


해결법

Python의 이미지 처리 모듈 하면 

  • PIL (Python Image Library)
  • OpenCV (Computer Vision)

이 있다.

여기서 OpenCV를 이용하면서 한글이 깨지기 때문에

PIL을 이용해 한글을 출력하면 된다.

 

일단 PIL모듈을 설치하자.

PIL모듈의 이름은 Pillow이다.

Pycharm 모듈 설치 화면

import cv2
import numpy as np
from PIL import ImageFont, ImageDraw, Image

img = np.full(shape=(512,512,3),fill_value=255,dtype=np.uint8)
img = Image.fromarray(img) #img배열을 PIL이 처리가능하게 변환

draw = ImageDraw.Draw(img)
font=ImageFont.truetype("fonts/gulim.ttc",20)
org=(50,100)
text="Hello OpenCV!(한글)"
draw.text(org,text,font=font,fill=(0,0,0)) #text를 출력
img = np.array(img) #다시 OpenCV가 처리가능하게 np 배열로 변환

#OpenCV기준으로 text크기를 구해 사각형 생성
font=cv2.FONT_HERSHEY_SIMPLEX
text="Hello OpenCV!(한글)"
size, BaseLine=cv2.getTextSize(text,font,1,2)
cv2.rectangle(img,org,(org[0]+size[0],org[1]+size[1]),(0,0,255))
cv2.circle(img,org,3,(255,0,255),2)

cv2.imshow("A",img)
cv2.waitKey()
cv2.destroyAllWindows()

위 코드는 PIL을 이용해 text를 출력하고 OpenCV기준으로 사각형의 크기를 구해 출력한다.

실행결과

사각형은 OpenCV모듈로 구한 것이라서 오차가 있다.

PIL모듈에 Text의 크기를 출력하는 함수가 있는지는 모르겠다.

어쨌든 Python에서 PIL과 OpenCV를 혼합 사용하여 한글을 출력할 수 있다.

OpenCV로만 한글을 출력할 수 있는데 너무 번거롭다.

https://kkokkal.tistory.com/1325

 

OpenCV Freetype 모듈을 이용하여 영상에 한글 출력하기

OpenCV 3.2 버전부터 FreeType 모듈을 지원합니다. FreeType 모듈은 말 그대로 OpenCV에서 Freetype 라이브러리를 활용할 수 있게 도와주는 클래스이며, 이를 이용하면 영상에 다양한 폰트의 영문 및 한글을

kkokkal.tistory.com

혹시 OpenCV만으로 출력하고 싶은 분들은 위 블로그를 참고하시길....

반응형