지난 번에는 cv2.putText를 이용해서 글자를 넣는 방법을 시도했다. 그런데 글꼴 변경이 제한적이고 anti-aliasing도 마음에 들지 않아서 다른 방법을 찾아 보았다.
다른 방법은 pillow를 이용하는 것이다. 정말 웃기는 것은 PIL.ImageDraw는 동작하지 않는 다는 것이다.
Text 를 그림 한 가운데에 넣으려면 위치를 계산해 주어야 한다. 수작업으로 구해볼려고 하다가 찾아봤더니 역시 크기를 측정하는 함수가 있었다.
from PIL import ImageFont, ImageDraw, Image
W, H = (600, 240)
fig = numpy.zeros((H, W, 3), dtype = numpy.uint8)
fig = cv2.cvtColor(fig, cv2.COLOR_BGR2RGB)
fig = Image.fromarray(fig)
draw = ImageDraw.Draw(fig)
myfont = ImageFont.truetype("consola.ttf", 260)
w, h = draw.textsize("2", font=myfont)
draw.text(
((W-w)/2,(H-h)/2),
"2",
font=myfont
)
fig = cv2.cvtColor(numpy.array(fig), cv2.COLOR_RGB2BGR)