Som*_*ing 4 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
Run Code Online (Sandbox Code Playgroud)
我创建了一个新的空白图片,其大小由返回getTextSize,然后根据docs在左下角添加文本,该文本x = 0, y = (height - 1)使用相同的字体,比例和粗细参数getTextSize
cv2.putText(label_patch, label, (0, label_height - 1), FONT, FONT_SCALE, label_color, FONT_THICKNESS)
Run Code Online (Sandbox Code Playgroud)
但是当我在图像上使用imshow或imwrite时label_patch,这是我得到的结果:
它可以很容易地看出,小写 p字母和小写g是切在中间,这样g并a不能甚至加以区分。如何使OpenCV getTextSize返回正确的大小,如何使OpenCV putText从实际最低点开始绘制文本?
找到了解决方案,回答自己,并希望其他人将从中受益。
我发现还有另一个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)
Run Code Online (Sandbox Code Playgroud)
现在,在与before相同的位置添加文本,这意味着基线像素将保持在下面:
cv2.putText(label_patch, label, (0, label_height - 1), FONT, FONT_SCALE, label_color, FONT_THICKNESS)
Run Code Online (Sandbox Code Playgroud)
结果:
| 归档时间: |
|
| 查看次数: |
2765 次 |
| 最近记录: |