
OpenCV putText 함수로 이미지 위에 글씨 작성하기
최근 opencv 를 이용하면서 이미지 위에 데이터(좌표정보)를 표시해야 할 필요가 있었습니다.
OpenCV 는 각종 이미지 프로세싱 뿐만 아니라 필요한 문구를 이미지에 넣는 기능도 제공하고 있는데요,
OpenCV 에서는 cv2.putText() 함수를 이용해 이미지 위에 글자를 쉽게 쓸 수 있습니다.
이 함수는 이미지, 입력할 텍스트, 좌표, 폰트 종류, 크기, 색상, 두께 등을 인자로 받습니다.
함수 원형
cv2.putText(img, text, org, fontFace, fontScale, color, thickness, lineType, bottomLeftOrigin)
주요 파라미터 설명
putText에 주로 사용되는 파라미터는다음과 같습니다.
- img: 텍스트를 넣을 이미지 배열
- text: 표시할 문자열
- org: 텍스트의 왼쪽 아래 좌표 (x, y)
- fontFace: 폰트 종류. 예:
cv2.FONT_HERSHEY_SIMPLEX - fontScale: 폰트 크기
- color: 텍스트 색상 (BGR). 예: (255, 0, 0) → 파란색
- thickness: 글자 두께
예시 코드
아래는 putText를 활용한 예시 코드입니다.
import cv2
import numpy as np
# 빈 이미지 생성
img = np.zeros((300, 500, 3), dtype=np.uint8)
img.fill(255) # 흰 배경
# 텍스트 입력
cv2.putText(img, 'Hello OpenCV', (50, 150), cv2.FONT_HERSHEY_SIMPLEX, 1.5, (0, 0, 255), 2)
cv2.imshow('Text Example', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
이렇게 하면 하얀 배경에 빨간색 "Hello OpenCV"라는 글자가 표시됩니다.
아래는 제가 사용한 코드의 출력 입니다.
위에서 코드랑 크게 다르지 않음을 확인할 수 있습니다.


위 코드 예시에서 circle을 이용한 좌표 우측 상단에 Text가 표시되도록 좌표 값을 putText에 입력하는 것을 보실 수 있습니다.
한글 입력시 문제점
그런데 putText를 사용하다 보면 한글 사용에 문제를 겪게 됩니다.
그 이유는 cv2.putText() 함수가 기본적으로 한글을 지원하지 않기 때문인데요, 한글을 입력하면 글자가 깨져서 네모(□□)로 표시됩니다.
그 이유는 OpenCV는 내부적으로 영문 폰트만 지원하며, 한글 폰트 파일(.ttf 등)을 직접 로드하여 사용할 수 없기 때문입니다.
그렇다면 어떻게 한글을 사용해야 할까요?
한글을 Text 함수로 이미지 위에 쓰는 방법
한글을 이미지 위에 표시하는 방법은 Pillow(PIL) 라이브러리를 활용하는 것 입니다.
Pillow는 다양한 폰트를 지원하며, 한글 텍스트도 문제없이 표시할 수 있습니다.
필요 패키지 설치
pip install pillow opencv-python
예시 코드
import cv2
import numpy as np
from PIL import Image, ImageDraw, ImageFont
# 빈 이미지 생성 (OpenCV)
img = np.zeros((300, 500, 3), dtype=np.uint8)
img.fill(255) # 흰 배경
# OpenCV 이미지를 Pillow 이미지로 변환
pil_img = Image.fromarray(img)
# 폰트 설정 (예: 나눔고딕, 경로에 맞게 수정)
font_path = "NanumGothic.ttf" # 또는 "malgun.ttf" 등
font_size = 30
font = ImageFont.truetype(font_path, font_size)
# Pillow로 텍스트 그리기
draw = ImageDraw.Draw(pil_img)
text = "한글 텍스트 표시"
draw.text((50, 150), text, font=font, fill=(0, 0, 255)) # 빨간색
# Pillow 이미지를 OpenCV 이미지로 변환
img = np.array(pil_img)
# 결과 출력
cv2.imshow('Korean Text Example', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
PIL을 이용하면 한글이 이미지 위에 문제없이 출력되는 것을 확인하실 수 있습니다.
결론
기본적으로 OpenCV의 cv2.putText() 함수는 영문 텍스트 표시에 최적화되어 있습니다.
그렇다보니 한글을 이미지에 표시하는 경우 원하는 결과를 얻지 못하게 되는데요,
한글을 이미지에 표시하려면 Pillow 라이브러리를 활용하여 폰트를 적용하고, 이미지를 변환하는 코드를 넣어주면 문제없이 한글, 영문 모두 자유롭게 이미지 위에 표시가 가능해 집니다.
당연하게 출력이 될 것이라고 생각했던 한글이 이미지에 깨져서 원인을 찾지 못하는 분들에게 도움이 되었으면 좋겠습니다.
읽어주셔서 감사합니다.
'CS > Python' 카테고리의 다른 글
| [python3] Python 에서 유닛테스트 만들기 - 초보자편 (0) | 2022.11.07 |
|---|---|
| [python3] Lambda (람다) 함수 개념과 활용법, 장단점 - 쉽고빠른파이썬 (0) | 2022.11.05 |
| [python3] 파이썬에서 이터레이터 (Iterator) 란? (0) | 2022.11.03 |
| Python3 print 함수 출력 글자 색 바꿔서 출력하는 방법 (0) | 2022.08.05 |
| [파이썬 배우기] python 출력 새로고침, 갱신하면서 출력 하는 방법 (0) | 2022.08.01 |