我有一个关于
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)
预先感谢您的帮助
不幸的是,无法直接将字体添加到 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 结合使用是一种更灵活、更简单的解决方案。
您可以在opencv中使用freetype2添加自定义字体。您可能必须使用 conda 安装 opencv 或使用 freetype 支持从源代码构建它。 (pip install 好像不行)
参考: