[OpenCV] Basic 14 - 텍스트 추가하기 (Add Text)
반응형
OpenCV에서는 이미지에 텍스트를 추가하여 설명이나 주석을 넣을 수 있습니다. 예를 들어, 객체 인식 후 객체의 이름을 표시하거나, 특정 위치에 정보를 표시할 때 유용하게 사용할 수 있습니다. putText
함수를 사용하여 이미지를 원하는 스타일과 위치로 꾸밀 수 있습니다.
Import packages
import cv2
import numpy as np
import matplotlib.pyplot as plt
Function to Display Images in Jupyter Notebook
Jupyter Notebook 및 Google Colab에서 이미지를 표시할 수 있도록 Function으로 정의합니다.
def img_show(title='image', img=None, figsize=(8, 5)):
plt.figure(figsize=figsize)
if type(img) == list:
titles = title if type(title) == list else [title] * len(img)
for i in range(len(img)):
rgbImg = cv2.cvtColor(img[i], cv2.COLOR_GRAY2RGB) if len(img[i].shape) <= 2 else cv2.cvtColor(img[i], cv2.COLOR_BGR2RGB)
plt.subplot(1, len(img), i + 1)
plt.imshow(rgbImg)
plt.title(titles[i])
plt.xticks([]), plt.yticks([])
plt.show()
else:
rgbImg = cv2.cvtColor(img, cv2.COLOR_GRAY2RGB) if len(img.shape) < 3 else cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(rgbImg)
plt.title(title)
plt.xticks([]), plt.yticks([])
plt.show()
Load Image
이미지를 불러옵니다.
cv2_image = cv2.imread('asset/images/test_image.jpg')
img_show("Original Image", cv2_image)
1. 기본적인 텍스트 추가 (Basic Text)
putText
함수를 사용해 텍스트를 이미지에 추가할 수 있습니다. 주요 파라미터로는 텍스트 내용, 위치, 글꼴, 크기, 색상, 두께 등이 있습니다.
text_image = cv2_image.copy()
text = "Hello, OpenCV!"
position = (50, 50) # 텍스트의 시작 좌표 (x, y)
font = cv2.FONT_HERSHEY_SIMPLEX # 글꼴 설정
font_scale = 0.5 # 글꼴 크기
color = (255, 0, 0) # 텍스트 색상 (파란색)
thickness = 1 # 텍스트 두께
cv2.putText(text_image, text, position, font, font_scale, color, thickness)
img_show("Text Added", text_image)
2. 다양한 글꼴 사용
OpenCV는 여러 가지 기본 글꼴을 제공합니다. 필요에 따라 다른 글꼴을 선택할 수 있습니다.
font_styles = [
cv2.FONT_HERSHEY_SIMPLEX,
cv2.FONT_HERSHEY_COMPLEX,
cv2.FONT_HERSHEY_DUPLEX,
cv2.FONT_HERSHEY_TRIPLEX,
cv2.FONT_HERSHEY_COMPLEX_SMALL,
cv2.FONT_HERSHEY_SCRIPT_SIMPLEX,
cv2.FONT_HERSHEY_SCRIPT_COMPLEX
]
text_image = cv2_image.copy()
y = 20
for font in font_styles:
cv2.putText(text_image, f"Font Style {font}", (10, y), font, 0.5, (0, 255, 0), 1)
y += 30 # Y 좌표를 아래로 이동하여 각 글꼴을 보여줌
img_show("Various Fonts", text_image)
3. 텍스트 크기와 두께 변경
font_scale
와 thickness
값을 조절하여 텍스트의 크기와 두께를 변경할 수 있습니다.
text_image = cv2_image.copy()
cv2.putText(text_image, "Small Thin Text", (10, 50), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 255), 1)
cv2.putText(text_image, "Large Bold Text", (10, 100), cv2.FONT_HERSHEY_SIMPLEX, 1.5, (255, 255, 0), 3)
img_show("Text Size and Thickness", text_image)
4. 텍스트 배경 추가 (Text with Background)
텍스트를 가독성 있게 만들기 위해 배경 색상을 추가할 수 있습니다. 먼저 배경을 그린 다음, 그 위에 텍스트를 추가합니다.
text_image = cv2_image.copy()
text = "Text with Background"
position = (30, 130)
# 텍스트 크기 측정
(text_width, text_height), _ = cv2.getTextSize(text, font, font_scale, thickness)
# 배경 그리기
cv2.rectangle(text_image, (position[0], position[1] - text_height), (position[0] + text_width, position[1]), (0, 0, 0), -1)
# 텍스트 그리기
cv2.putText(text_image, text, position, font, font_scale, (255, 255, 255), thickness)
img_show("Text with Background", text_image)
5. 텍스트 회전 (Rotated Text)
OpenCV에서 텍스트 회전을 직접 지원하지 않으므로, 먼저 빈 이미지를 만들고 텍스트를 추가한 후 회전하는 방식으로 구현합니다.
# 텍스트가 포함될 빈 이미지 생성
text_image = np.zeros_like(cv2_image)
# 텍스트 추가
text = "Rotated Text"
position = (50, 150)
cv2.putText(text_image, text, position, font, font_scale, (255, 255, 255), thickness)
# 이미지 회전
center = (position[0] + 100, position[1] - 20)
rotated_matrix = cv2.getRotationMatrix2D(center, 45, 1.0)
rotated_text = cv2.warpAffine(text_image, rotated_matrix, (text_image.shape[1], text_image.shape[0]))
# 원본 이미지와 합치기
combined_image = cv2.addWeighted(cv2_image, 1, rotated_text, 1, 0)
img_show("Rotated Text", combined_image)
요약
putText
함수를 사용하여 이미지에 다양한 스타일의 텍스트를 추가할 수 있습니다. 텍스트 크기, 색상, 두께뿐 아니라 배경을 넣거나 회전된 텍스트를 추가하는 등 다양한 응용이 가능합니다. 텍스트 추가는 이미지에 설명이나 주석을 넣어 이미지의 의미를 전달하는 데 유용하게 활용됩니다.
반응형
'Tech & Development > Image Processing' 카테고리의 다른 글
[OpenCV] Basic 13 - 윤곽선 검출 (Contour Detection) (0) | 2024.11.21 |
---|---|
[OpenCV] Basic 12 - 이미지 필터 (Filters) 적용 (0) | 2024.11.20 |
[OpenCV] Basic 11 - 이미지 히스토그램 (Histogram) 분석 (0) | 2024.11.19 |
[OpenCV] Basic 10 - 이미지 색상 변환 (Color Conversion) (1) | 2024.11.16 |
[OpenCV] Basic 9 - 이미지 경계선 검출 (Edge Detection) (0) | 2024.11.15 |
댓글
이 글 공유하기
다른 글
-
[OpenCV] Basic 13 - 윤곽선 검출 (Contour Detection)
[OpenCV] Basic 13 - 윤곽선 검출 (Contour Detection)
2024.11.21 -
[OpenCV] Basic 12 - 이미지 필터 (Filters) 적용
[OpenCV] Basic 12 - 이미지 필터 (Filters) 적용
2024.11.20 -
[OpenCV] Basic 11 - 이미지 히스토그램 (Histogram) 분석
[OpenCV] Basic 11 - 이미지 히스토그램 (Histogram) 분석
2024.11.19 -
[OpenCV] Basic 10 - 이미지 색상 변환 (Color Conversion)
[OpenCV] Basic 10 - 이미지 색상 변환 (Color Conversion)
2024.11.16