본문 바로가기
강의 (Lecture)/OpenCV 마스터 with Python (초급)

OpenCV + Python 한글 폰트 출력하기

by codingwalks 2024. 9. 30.
728x90
반응형

안녕하세요. 코딩산책입니다.

OpenCV는 기본적으로 한글을 출력하는 기능을 지원하지 않기 때문에, 한글을 이미지에 출력하려면 별도의 추가 작업이 필요합니다. 이를 위해 주로 사용하는 방법은 TrueType 폰트(TTF) 파일을 사용하여 Pillow(PIL) 라이브러리의 도움을 받아 한글을 이미지에 그리는 방식입니다.

 

1. 기본적인 OpenCV의 텍스트 출력 기능

OpenCV에서는 cv2.putText() 함수를 사용하여 이미지를 텍스트로 주석 처리할 수 있습니다. 하지만 이 함수는 주로 영어, 숫자 등 ASCII 기반 텍스트만 제대로 출력되며, 한글과 같은 유니코드 문자 출력은 지원하지 않습니다.

import cv2
import numpy as np

# Create a blank image
image = np.zeros((512, 512, 3), np.uint8)

# Output English text
cv2.putText(image, 'OpenCV Text Example', (50, 200), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 2)
# Output Korean text
cv2.putText(image, 'OpenCV 텍스트 예제', (50, 250), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 2)

# Image Output
cv2.imshow('Text', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

텍스트 출력 결과

이 코드는 영어 텍스트는 제대로 출력되지만, 한글을 입력할 경우 깨진 문자가 출력됩니다. 이를 해결하기 위해 다른 접근 방식이 필요합니다.

 

2. 한글 폰트 출력하기 위한 대안 - Pillow 라이브러리 사용

OpenCV에서 한글을 출력하기 위해서는 이미지 처리 라이브러리인 Pillow(PIL)를 이용해야 합니다. Pillow는 다양한 텍스트와 폰트를 이미지에 그릴 수 있는 강력한 기능을 제공합니다.

2.1 Pillow 설치

먼저, 한글 텍스트를 출력하기 위해 Pillow 라이브러리를 설치해야 합니다. pip를 사용하여 간단하게 설치할 수 있습니다.

pip install pillow

2.2 한글 폰트 파일 준비

Pillow는 폰트 파일을 이용해 텍스트를 출력하므로, 한글을 지원하는 .ttf 폰트 파일이 필요합니다. 예를 들어, 나눔고딕과 같은 폰트를 다운로드하여 사용할 수 있습니다.

 

네이버 글꼴 모음

네이버가 만든 150여종의 글꼴을 한번에 만나보세요

hangeul.naver.com

2.3 OpenCV에서 Pillow와 함께 한글 출력하기

이제 Pillow와 OpenCV를 결합하여 한글 텍스트를 이미지에 출력하는 방법을 살펴보겠습니다.

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

# Create a blank image
image = np.zeros((512, 512, 3), np.uint8)

# Convert OpenCV image to Pillow's Image object
image_pil = Image.fromarray(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))

# Set the Korean font path (specify the exact location of the font file)
fontpath = "fonts/NanumGothic.ttf"
font = ImageFont.truetype(fontpath, 40)

# Creating a Draw object in Pillow
draw = ImageDraw.Draw(image_pil)

# Drawing Korean text
text = "OpenCV 텍스트 예제"
draw.text((50, 200), text, font=font, fill=(255, 255, 255))

# Convert back to OpenCV image
image = cv2.cvtColor(np.array(image_pil), cv2.COLOR_RGB2BGR)

# Image Output
cv2.imshow('Hangul Text', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

한글 텍스트 출력

2.4 코드 설명

1. Pillow로 이미지 변환: OpenCV의 이미지(numpy 배열)를 Pillow에서 처리하기 위해, OpenCV 이미지를 Pillow의 Image 객체로 변환합니다.
2. 폰트 설정: ImageFont.truetype() 함수를 사용하여 폰트 파일과 크기를 지정합니다. 여기서 폰트 파일은 반드시 한글을 지원하는 .ttf 파일이어야 하며, 경로를 정확하게 지정해야 합니다.
3. 텍스트 그리기: PillowImageDraw 객체를 사용하여 텍스트를 이미지에 그립니다. 한글 텍스트는 draw.text() 함수로 그릴 수 있으며, 이 함수는 다양한 언어의 텍스트를 지원합니다.
4. 이미지 다시 변환: 텍스트가 추가된 이미지를 다시 OpenCV 형식으로 변환하여 OpenCV에서 처리할 수 있도록 합니다.

 

3. 결론

위의 코드를 실행하면 검은색 배경에 흰색 텍스트로 “OpenCV 텍스트 예제”라는 문구가 이미지에 출력된 것을 확인할 수 있습니다. OpenCV의 기본 함수만으로는 해결하기 어려웠던 한글 출력 문제를 Pillow 라이브러리를 활용해 간단히 해결할 수 있습니다.

OpenCV는 기본적으로 한글을 직접적으로 출력하는 기능을 제공하지 않지만, Pillow와 같은 추가 라이브러리를 통해 쉽게 해결할 수 있습니다. 이 방법을 통해 한글뿐만 아니라 다양한 언어로 텍스트를 이미지에 추가할 수 있습니다. 이미지 처리와 주석 작업에서 한글을 사용해야 할 때 유용하게 적용해 보세요.

 

해당 포스트가 유용하셨다면 하단의 좋아요와 구독하기 부탁드립니다. ^^

Buy me a coffee

 

[Codingwalks]에게 송금하기 - AQR

[Codingwalks]에게 송금하기 - AQR

aq.gy

728x90
반응형