如何在Python中的OpenCV库中添加字体?

问题描述 投票:0回答:2

我有一个关于

OpenCV
上的字体的非常具体的问题要问。

众所周知,字体是预定义的,如果你想使用列表中没有的字体,你需要PIL的帮助(

Pillow
)。

现在我的问题是

Pillow
允许对字体进行一些操作,但例如它不允许计算我需要的高度。

所以我有一个疑问,如果

OpenCV
库有可用字体列表,则可以将一种添加到列表中。

为了更好地解释自己,我认为它使用的好时字体在某个地方,我不知道是在文件中还是其他地方。 因此,修改库并添加一个库的可能性对我来说似乎并不那么遥远(也许我错了)。

我知道这个问题非常具体,可能无法回答,但我将不胜感激对我的问题的任何帮助或批评,这可以为我指明正确的方向。

另外,我想问最后一个问题,以防第一个问题没有答案。

OpenCV
上有一个与此语法完全兼容的字体管理库,它允许我用另一种字体替换fontFace:

cv2.putText(img=white_back, text=text, org=(bl[0], bl[1] - 10), fontFace="FONT_NOT_HERSHEY", fontScale=font_scale, color=(0, 0, 0), thickness=thickness, lineType=cv2.LINE_AA)

预先感谢您的帮助

python opencv fonts
2个回答
0
投票

不幸的是,无法直接将字体添加到 OpenCV 库中可用的字体列表中。 OpenCV 使用的 Hershey 字体是内部定义的,不能轻易修改或扩展。

但是,如果您需要使用 OpenCV 中不可用的特定字体,您可以结合使用 OpenCV 和 Pillow (PIL) 库来实现您想要的结果。以下是实现此目的的分步方法:

安装必要的库:

pip install opencv-python
pip install Pillow

找到您要使用的字体的 TrueType 字体文件 (.ttf)。确保您有权在应用程序中使用该字体。

使用Pillow加载字体并执行必要的操作,例如计算字体高度。例如,计算字体高度:

from PIL import ImageFont

font_path = "path_to_your_font.ttf"
font_size = 24

font = ImageFont.truetype(font_path, font_size)
font_height = font.getsize("A")[1]  # Calculate the height using a sample character

使用 OpenCV 使用加载的字体在图像上绘制文本。您可以指定字体、大小、颜色等

import cv2
import numpy as np

image = np.zeros((500, 500, 3), dtype=np.uint8)  # Example image

text = "Hello, World!"
color = (255, 255, 255)  # White color
position = (50, 50)  # Position to draw the text

image_pil = Image.fromarray(image)  # Convert OpenCV image to PIL image
draw = ImageDraw.Draw(image_pil)
draw.text(position, text, font=font, fill=color)
image_with_text = np.array(image_pil)  # Convert PIL image back to OpenCV image

cv2.imshow("Image with Text", image_with_text)
cv2.waitKey(0)
cv2.destroyAllWindows()

通过结合 OpenCV 和 Pillow,您可以使用任何 TrueType 字体并执行各种操作,例如计算字体高度、绘制文本等。 请注意,修改 OpenCV 的内部字体列表不是推荐的方法,因为它需要修改源代码并重新编译库,这对于大多数用例来说可能很复杂且不实用。将上述方法与 Pillow 结合使用是一种更灵活、更简单的解决方案。


0
投票

您可以在opencv中使用freetype2添加自定义字体。您可能必须使用 conda 安装 opencv 或使用 freetype 支持从源代码构建它。 (pip install 好像不行)

参考:

© www.soinside.com 2019 - 2024. All rights reserved.