OpenCV的`getTextSize`和`putText`返回错误的大小,并用较低的像素分割字母

时间:2018-07-11 12:34:43

标签: opencv opencv-python opencv-text

我有以下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时,这是我得到的结果:

enter image description here

很容易看出,小写的p和小写的g在中间被切掉了,使得ga甚至无法区分。如何使OpenCV的getTextSize返回正确的大小,如何使OpenCV的putText从实际最低点开始绘制文本?

1 个答案:

答案 0 :(得分:5)

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

我发现getTextSize返回了另一个参数,即基线。我创建的框应该已经考虑到了:

(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)

现在,在与以前相同的位置添加文本 ,这意味着基线像素将保持在下面:

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

结果:

enter image description here