You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python版OpenCV中添加自定义字体及相关字体问题

OpenCV字体相关问题解答

1. 能否修改OpenCV库添加自定义字体到字体列表?

OpenCV的Hershey字体是硬编码在源码中的,虽然可以通过修改OpenCV的字体注册源码编译自定义版本来添加字体,但这种方式维护成本极高,不推荐生产环境使用。更实用的方案是绕开OpenCV原生putText,用第三方库(如Pillow、FreeType)渲染文字后,将图像转换为OpenCV兼容格式叠加到目标图像上。

2. Pillow处理字体无法获取所需字体高度的解决方案

Pillow的ImageFont对象提供两种可靠的字体高度获取方式:

  • 方法1:使用getmetrics()
    该方法返回字体的上升值(ascender)和下降值(descender),总高度为两者差值:
    from PIL import ImageFont
    
    font = ImageFont.truetype("your_font.ttf", font_size=40)
    ascender, descender = font.getmetrics()
    total_height = ascender - descender
    
  • 方法2:使用getbbox()
    通过获取文本边界框计算高度,若要获取字体最大高度,可传入包含全字符的文本或空字符串(部分Pillow版本支持):
    bbox = font.getbbox("Sample Text")
    # bbox格式为(left, top, right, bottom)
    font_height = bbox[3] - bbox[1]
    

3. 是否存在兼容cv2.putText语法的字体管理库?

可以使用cv2-freetype库,其API完全对齐cv2.putText,只需提前加载自定义TTF字体即可替代Hershey字体。示例代码:

import cv2
import cv2freetype

# 初始化FreeType字体加载器
ft = cv2freetype.createFreeType2()
ft.loadFontData(fontFileName="custom_font.ttf", id=0)

# 用法与cv2.putText几乎一致,仅将fontSize替换为fontHeight
img = cv2.imread("background.jpg")
ft.putText(
    img=img,
    text="自定义字体测试",
    org=(100, 100),
    fontHeight=50,
    color=(0, 255, 0),
    thickness=2,
    lineType=cv2.LINE_AA
)
cv2.imshow("Result", img)
cv2.waitKey(0)

内容的提问来源于stack exchange,提问作者fANNyCOttero

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 13:12:11