OpenCV-Python如何设置文本字体大小为指定像素值?
OpenCV-Python 精确控制文本像素高度的方法
OpenCV的cv2.putText()默认通过fontScale(相对比例)控制文本大小,无法直接指定绝对像素高度。要实现精确到指定L px的文本显示,核心是通过cv2.getTextSize()测量基准尺寸,再反推对应参数,具体步骤如下:
- 确定目标像素高度L(比如20px),选定目标字体(如
cv2.FONT_HERSHEY_PLAIN) - 以
fontScale=1、thickness=1调用cv2.getTextSize(),获取该字体在默认比例下的文本高度 - 计算缩放比例
scale = L / 基准高度,这个比例就是让文本高度达到L px的对应参数 - 如需调整线条粗细,直接修改
thickness即可(该参数仅改变笔画粗细,不影响文本整体高度)
示例代码
import cv2 import numpy as np # 目标文本像素高度 target_height = 20 # 要显示的文本 text = "Sample Text" # 选定字体 font = cv2.FONT_HERSHEY_PLAIN # 获取基准尺寸(fontScale=1,thickness=1时的文本高度) (text_width, text_height), baseline = cv2.getTextSize(text, font, 1, 1) # 计算所需fontScale font_scale = target_height / text_height # 设置线条粗细 thickness = 2 # 创建测试图像 img = np.zeros((100, 350, 3), dtype=np.uint8) # 绘制文本 cv2.putText(img, text, (30, 60), font, font_scale, (255, 255, 255), thickness) # 验证实际高度 (actual_width, actual_height), _ = cv2.getTextSize(text, font, font_scale, thickness) print(f"目标高度: {target_height}px, 实际高度: {actual_height}px") cv2.imshow("Precise Text", img) cv2.waitKey(0) cv2.destroyAllWindows()
注意事项
cv2.getTextSize()返回的高度是文本实际绘制高度(不含基线偏移),用该值计算的缩放比例能精准匹配目标高度- 不同字体的基准高度存在差异,必须针对选定字体单独计算
fontScale thickness仅影响笔画粗细,不会改变文本整体高度,调整粗细无需重新计算比例
内容的提问来源于stack exchange,提问作者Arnav
相关产品推荐
相关产品推荐

