Проблема возникает из-за того, что позиция, заданная для cv2.putText
, определяет начало координат (левый нижний угол прямоугольной области, которая соответствует нарисованному тексту).
Чтобы текст центрировался вокруг некоторой заданной точки, сначала необходимо измерить размер этой прямоугольной области (ограничительной рамки). Это можно сделать с помощью функции cv2.getTextSize
.
Теперь, чтобы текст был отцентрирован, источник должен сместиться вниз на половину высоты прямоугольника, а влево на половину ширины ограничивающего прямоугольника.
text_origin = (CENTER[0] - text_size[0] / 2, CENTER[1] + text_size[1] / 2)
Код:
import cv2
import numpy as np
img = np.zeros((128, 128, 3), dtype=np.uint8)
CENTER = (64, 64)
cv2.circle(img, CENTER, 48, (127,0,127), -1)
TEXT_FACE = cv2.FONT_HERSHEY_DUPLEX
TEXT_SCALE = 1.5
TEXT_THICKNESS = 2
TEXT = "0"
text_size, _ = cv2.getTextSize(TEXT, TEXT_FACE, TEXT_SCALE, TEXT_THICKNESS)
text_origin = (CENTER[0] - text_size[0] / 2, CENTER[1] + text_size[1] / 2)
cv2.putText(img, TEXT, text_origin, TEXT_FACE, TEXT_SCALE, (127,255,127), TEXT_THICKNESS, cv2.LINE_AA)
cv2.imwrite('centertext_out.png', img)
Выходное изображение:
![](https://i.stack.imgur.com/u7w3i.png)