Нарисуйте текст внутри круга OpenCV - PullRequest
1 голос
/ 29 апреля 2019

Есть ли удобный способ рисовать текст прямо в кружок OpenCV? Не нашли подобного ответа в Google.

Если я просто использую кружок Centroid_X и Centroid_Y для putText , я получаю что-то похожее на картинку ниже, но хочу, чтобы текст полностью поместился в кружок и не могу найти какой-либо элегантный способ рисовать текст внутри круга.

cv2.putText(frame, text, (cX, cY), FONT, 1.5, TEXT_COLOUR, int(TEXT_THICKNESS), cv2.LINE_AA)

enter image description here

1 Ответ

1 голос
/ 29 апреля 2019

Проблема возникает из-за того, что позиция, заданная для 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)

Выходное изображение:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...