【问题标题】:Draw Text inside circle OpenCV在圆形OpenCV内绘制文本
【发布时间】:2019-04-29 13:26:57
【问题描述】:

有什么方便的方法可以将文本直接绘制到 OpenCV 圆圈中吗?在谷歌中没有找到任何类似的答案。

如果我只是将圆的 Centroid_XCentroid_Y 用于 putText 我会得到如下图所示的内容,但我希望 Text 完全适合圆并且找不到任何优雅的方式在圆圈内绘制文本。

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

【问题讨论】:

  • 使用cv2.getTextSize计算文本边界框的大小。将原点偏移盒子宽度和高度的一半,使其中心与圆的质心重合。

标签: python python-3.x opencv


【解决方案1】:

问题的出现是因为给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)

输出图像:

【讨论】:

  • 在你写答案的同时,我是根据你的建议自己做的。非常感谢。一切都很好。
  • 我认为你需要这样做,text_origin = (CENTER[0] - text_size[0] // 2, CENTER[1] + text_size[1] // 2) 保持整数。
  • @IeshaanSaxena 是的,如果您使用的是 Python 3.x。大约 2 年前我写这个答案的时候不是。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-30
  • 2016-12-08
  • 1970-01-01
  • 2015-01-26
  • 1970-01-01
相关资源
最近更新 更多