11

我有以下 Python 代码:

FONT = cv2.FONT_HERSHEY_SIMPLEX
FONT_SCALE = 1.0
FONT_THICKNESS = 2
bg_color = (255, 255, 255)
label_color = (0, 0, 0)

label = 'Propaganda'
label_width, label_height = cv2.getTextSize(label, FONT, FONT_SCALE, FONT_THICKNESS)[0]
label_patch = np.zeros((label_height, label_width, 3), np.uint8)
label_patch[:,:] = bg_color

我创建了一个新的空白图像,其getTextSize大小x = 0, y = (height - 1)getTextSize

cv2.putText(label_patch, label, (0, label_height - 1), FONT, FONT_SCALE, label_color, FONT_THICKNESS)

但是当我在图像上使用imshow或时,这是我得到的结果:imwritelabel_patch

在此处输入图像描述

很容易看出,小写 p和小写g在中间被剪掉了,g甚至a无法区分。如何让 OpenCVgetTextSize返回正确的大小,如何让 OpenCVputText从实际最低点开始绘制文本?

4

1 回答 1

22

找到解决方案,回答自己并希望其他人会从中受益。

我发现还有另一个参数getTextSize返回,即 baseline. 我创建的盒子应该考虑到它:它的高度应该是label_height + baseline

(label_width, label_height), baseline = cv2.getTextSize(label, FONT, FONT_SCALE, FONT_THICKNESS)
label_patch = np.zeros((label_height + baseline, label_width, 3), np.uint8)
label_patch[:,:] = bg_color

现在,在与之前相同的点添加文本,这意味着基线像素将保持在下方:

cv2.putText(label_patch, label, (0, label_height), FONT, FONT_SCALE, label_color, FONT_THICKNESS)

结果:

在此处输入图像描述

于 2018-07-11T12:50:14.840 回答