使用 PIL 在 OpenCV Python 中更改字体系列

Posted

技术标签:

【中文标题】使用 PIL 在 OpenCV Python 中更改字体系列【英文标题】:Changing font family in OpenCV Python using PIL 【发布时间】:2018-11-24 23:32:52 【问题描述】:

上面的答案并没有解决我的问题。

我正在使用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)

【问题讨论】:

Load TrueType Font to OpenCV的可能重复 @Silencer 我不明白你怎么会认为这是一个重复的问题。我知道您链接的答案是您自己的答案;但是您的答案显然是针对图像而不是视频。我在我的问题中解释说我有图像解决方案,但我的问题是如何将类似的 PIL 解决方案应用于视频。您对我的问题有解决方案吗? @zindarod 感谢您的评论。我真的是上周第一次开始学习 OpenCV。也就是说,我知道视频是一系列图像......哈哈。我刚刚从我在 OpenCV 中创建的图像构建了一些视频。很好玩,不过我想用已经存在的cv2.putText把文字直接放到视频里,效果很好!!只是,好时字体恰好丑陋。所以,我试图避免以艰难的方式做到这一点,即逐个图像。 这可能有用...***.com/a/53697181/2836621 【参考方案1】:

你可以使用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)

这个屏幕的输出是here。

【讨论】:

非常感谢您帮我解决这个问题。第一次尝试,我得到了AttributeError: module 'cv2' has no attribute 'freetype'。我正在使用opencv 3.4.1python 3.5.2。有什么建议?再次感谢。 可能需要这个pip install opencv-contrib-python 我在 Conda 中创建了一个新环境并安装了opencv-contrib-python。我可以import cv2,所以它可以工作,但我仍然得到相同的AttributeError。我对这个模块很兴奋,我希望我可以让它工作。可能是什么问题? 据此:***.com/questions/47726854/…,freetype 不适用于 Python

以上是关于使用 PIL 在 OpenCV Python 中更改字体系列的主要内容,如果未能解决你的问题,请参考以下文章

路径名太长,尝试在 Python 中使用 OpenCV 或 PIL.Image 保存图像时出错

Python中PIL及Opencv转化

python中PIL.Image和OpenCV图像格式相互转换

如何从 PIL 图像创建 OpenCV 图像?

python+opencv+pil实现windows 图片位置查找

python中PIL.Image,OpenCV,Numpy图像格式相互转换