使用 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.1
和python 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.Image和OpenCV图像格式相互转换