OpenCV를 이용한 이미지/영상처리 - 도형그리기
6. 텍스트
이 전에 만들었던 스케치북에 텍스트를 입력할 수 있다. OpenCV에서 사용하는 글꼴의 종류는 다음과 같다.
OpenCV에서 사용하는 글꼴의 종류
1. cv2.FONT_HERSHEY_SIMPLEX : 보통 크기의 산 세리프(san-serif) 글꼴
2. cv2.FONT_HERSHEY_PLAIN : 작은 크기의 산 세레프 글꼴
3. cv2.FONT_HERSHEY_SCRIPT_SIMPLEX : 필기체 스타일 글꼴
4. cv2.FONT_HERSHEY_TRIPLEX : 보통크기의 세리프 글꼴
5. cv2.FONT_ITALIC : 기울임(이테릭체)
여기서 이테릭체의 경우 다른 스타일 글꼴과 함께 사용된다.
OpenCV에서 텍스트 입력하기
cv2.putText(그릴 위치, 텍스트 내용, 시작 위치, 폰트 종류, 크기, 색상, 두께)
cv2의 putText 함수에 텍스트 내용과 위치, 폰트 종류, 크기, 색상, 두께를 입력하면 텍스트가 입력된다.
보통 크기의 san-serif 글꼴을 적용한 예
import numpy as np
import cv2
img = np.zeros((480, 640, 3), dtype = np.uint8)
# 크기
scale = 1
# 색상 : White
color = (255, 255, 255)
# 두께
thinckness = 1
cv2.putText(img, "simplex", (20, 50), cv2.FONT_HERSHEY_SIMPLEX,
scale, color, thinckness)
cv2.imshow("image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
이 외에 다른 종류의 폰트를 적용하면 다음과 같이 나타낼 수 있다.
이테릭체의 경우 단독으로 쓰이지 않고 다른 글꼴과 함께 사용된다. 이때 같이 사용할 땐 "글꼴 종류 | cv2.FONT_ITALIC" 과 같은 형태로 사용된다.
import numpy as np
import cv2
img = np.zeros((480, 640, 3), dtype = np.uint8)
scale = 1
color = (255, 255, 255)
thinckness = 1
# simplex
cv2.putText(img, "simplex", (20, 50), cv2.FONT_HERSHEY_SIMPLEX,
scale, color, thinckness)
# plain
cv2.putText(img, "plain", (20, 100), cv2.FONT_HERSHEY_PLAIN,
scale, color, thinckness)
# script simplex
cv2.putText(img, "script simplex", (20, 150), cv2.FONT_HERSHEY_SCRIPT_SIMPLEX,
scale, color, thinckness)
# triplex
cv2.putText(img, "triplex", (20, 200), cv2.FONT_HERSHEY_TRIPLEX,
scale, color, thinckness)
# triplex X italic
cv2.putText(img, "italic", (20, 250), cv2.FONT_HERSHEY_TRIPLEX | cv2.FONT_ITALIC,
scale, color, thinckness)
cv2.imshow("image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
글자 크기(scale)를 키우거나 두께(thinckness)또한 조절할 수 있다.
한글 작성하기
위의 방법처럼 한글을 적으면 다음과 같은 오류가 발생한다.
이는 OpenCV에서 한글을 지원하지 않기 때문에 영어로 작성할 때처럼 한글을 입력하면 깨지는 현상이 발생한다. 만약 한글을 입력하고 싶은 경우 우회하는 방법으로 작성할 수 있다.
한글을 입력하기 위해선 PIL(Python Image Library) 가 필요하다. 이 라이브러리로 이미지에 한글을 입력하는 함수를 작성할 수 있다.
import numpy as np
import cv2
from PIL import ImageFont, ImageDraw, Image
def myPutText(src, text, pos, font_size, font_color):
# 이미지 객체로 전환
img_pil = Image.fromarray(src)
# 이미지 가져오기
draw = ImageDraw.Draw(img_pil)
# 글꼴
font = ImageFont.truetype('font_name'), font_size)
# 가져온 이미지에 텍스트 입력
draw.text(pos, text, font = font, fill = font_color)
return np.array(img_pil)
위 함수를 바탕으로 한글을 입력할 수 있다.
import numpy as np
import cv2
from PIL import ImageFont, ImageDraw, Image
def myPutText(src, text, pos, font_size, font_color):
img_pil = Image.fromarray(src)
draw = ImageDraw.Draw(img_pil)
font = ImageFont.truetype('PoorStory-Regular.ttf', font_size)
draw.text(pos, text, font = font, fill = font_color)
return np.array(img_pil)
img = np.zeros((480, 640, 3), dtype = np.uint8)
font_size = 30
color = (255, 255, 255)
img = myPutText(img, "안녕하세요", (20, 50), font_size, color)
cv2.imshow("image", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
'Study > ML | DL' 카테고리의 다른 글
[Python] OpenCV를 이용한 이미지/영상 처리 - 크기 조정 (0) | 2023.05.18 |
---|---|
[Python] OpenCV를 이용한 이미지/영상 처리 - 파일 저장 (0) | 2023.05.17 |
[Python] OpenCV를 이용한 이미지/영상 처리 - 도형그리기2(원형, 사각형, 다각형) (0) | 2023.05.04 |
[Python] OpenCV를 이용한 이미지/영상 처리 - 도형그리기1(영역색칠, 직선) (0) | 2023.05.03 |
[Python] OpenCV를 이용한 이미지/영상 처리 - 동영상 및 카메라 출력 (0) | 2023.05.02 |