Iva*_*nik 4 python opencv python-3.x
有没有什么方便的方法可以将文本直接绘制到 OpenCV 圆圈中?谷歌中没有找到类似的答案。
如果我只是使用圆形的Centroid_X和Centroid_Y作为putText,我会得到如下图所示的结果,但我希望文本完全适合圆形,并且无法找到任何优雅的方式在圆形内绘制文本。
cv2.putText(frame, text, (cX, cY), FONT, 1.5, TEXT_COLOUR, int(TEXT_THICKNESS), cv2.LINE_AA)
Run Code Online (Sandbox Code Playgroud)
出现此问题的原因是给定的位置cv2.putText定义了原点(适合绘制文本的矩形区域的左下角)。
为了使文本以某个给定点为中心,您首先需要测量该矩形区域(边界框)的大小。这可以使用函数来完成cv2.getTextSize。
现在,为了使文本居中,原点需要向下移动边界框高度的一半,并向左移动边界框宽度的一半。
text_origin = (CENTER[0] - text_size[0] / 2, CENTER[1] + text_size[1] / 2)
Run Code Online (Sandbox Code Playgroud)
代码:
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)
Run Code Online (Sandbox Code Playgroud)
输出图像:
| 归档时间: |
|
| 查看次数: |
5200 次 |
| 最近记录: |