opencv - OpenCV 的 `getTextSize` 和 `putText` 返回错误的大小并用较低的像素截断字母
问题描述
我有以下 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
或时,这是我得到的结果:imwrite
label_patch
很容易看出,小写 p
和小写g
在中间被剪掉了,g
甚至a
无法区分。如何让 OpenCVgetTextSize
返回正确的大小,如何让 OpenCVputText
从实际最低点开始绘制文本?
解决方案
找到解决方案,回答自己并希望其他人会从中受益。
我发现还有另一个参数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)
结果:
推荐阅读
- apache-kafka - 卡夫卡没有发布对主题的文件更改
- javascript - TypeError:无法读取 DiscountButton.apply_discount 处未定义的属性“taxes_by_id”(Odoo 14)
- jquery - JQuery 自动完成不显示国家/地区数组
- javascript - javascript 函数在按钮单击时不起作用。但是无需单击按钮即可工作
- python - 绘制均值和置信区间 - matplotlib
- vb.net - 间隔小于 1 秒的 WQL 查询
- c++ - 模板类中非模板(但类型特定)函数的 C++ 使用
- javascript - 哪些因素决定了 Javascript 应用程序的内存使用情况?
- javascript - Multer TypeError:无法读取未定义的属性“文件名”
- reactjs - 我如何在 React rsuite 库中重置表单?