使用PIL在OpenCV Python中更改字体族。

8

以上答案并不能解决我的问题。

我正在使用cv2.putText()在视频上添加文本。

这个功能正常工作,但是我想使用不同的字体(OpenCV中没有提供)。

我了解到OpenCV仅限于使用cv2.FONT_HERSHEY字体,因此我正在使用PIL与OpenCV配合实现此功能。

我曾经在图像上尝试过这种方法,并且成功了。但是当我在视频上尝试类似的操作时失败了。

import cv2
from PIL import ImageFont, ImageDraw, Image

camera = cv2.VideoCapture('some_video.wmv')
while cv2.waitKey(30) < 0:
    rv, frame = camera.read()
    if rv:
        font = ImageFont.truetype("calibrii.ttf", 80)
        cv2.putText(frame, 'Hello World!', (600, 600), font, 2.8, 255)
        cv2.imshow('Video', frame)

我在相同的目录下有"calibrii.ttf",正如我之前提到的,这种方法对图片有效。以下是错误信息:
cv2.putText(frame, 'Hello World!', (600, 600), font, 2.8, 255)
TypeError: an integer is required (got type FreeTypeFont)

3
可能是与Load TrueType Font to OpenCV相似的问题。 - Kinght 金
1
@Silencer,我不明白你怎么会认为这是一个重复的问题。我知道你在链接的答案中提供了自己的答案;但是你的答案显然是针对图像而不是视频的。我在我的问题中解释了我已经有了图像的解决方案,但我的问题是如何将类似的PIL解决方案应用于视频。你有我的问题的解决方案吗? - Joe T. Boka
2
@zindarod 感谢您的评论。我上周刚开始学习OpenCV。话虽如此,我知道视频是图像序列...哈哈。我刚刚从我在OpenCV中创建的图像中制作了一些视频。这很有趣,但我想使用已经存在的 cv2.putText 直接将文本放到视频中,这非常好用!只是 HERSHEY 字体实在太丑了。因此,我正在尝试避免以困难的方式进行操作,即逐个图像进行处理。 - Joe T. Boka
可能会有用……https://dev59.com/0bDla4cB1Zd3GeqP7F4b#53697181 - Mark Setchell
1个回答

10

您可以使用OpenCV的freetype模块来实现,无需使用PIL。

import cv2
import numpy as np

img = np.zeros((100, 300, 3), dtype=np.uint8)

ft = cv2.freetype.createFreeType2()
ft.loadFontData(fontFileName='Ubuntu-R.ttf',
                id=0)
ft.putText(img=img,
           text='Quick Fox',
           org=(15, 70),
           fontHeight=60,
           color=(255,  255, 255),
           thickness=-1,
           line_type=cv2.LINE_AA,
           bottomLeftOrigin=True)

cv2.imwrite('image.png', img)

这个屏幕的输出在这里


4
非常感谢您帮助我。第一次尝试时,我遇到了“AttributeError:模块'cv2'没有'freetype'属性”的问题。我正在使用opencv 3.4.1python 3.5.2。有什么建议吗?再次感谢。 - Joe T. Boka
1
可能需要执行以下命令来安装 pip install opencv-contrib-python - fireant
6
我在Conda中创建了一个新环境并安装了opencv-contrib-python。我可以导入cv2,所以它有效,但我仍然遇到相同的AttributeError错误。我对这个模块非常兴奋,希望能让它正常工作。可能出了什么问题? - Joe T. Boka
3
根据这个链接:https://dev59.com/f6fja4cB1Zd3GeqPvGRP,freetype 不适用于 Python。 - Kat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接