使用PIL

时间:2018-06-15 06:28:09

标签: python opencv pillow opencv-python

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

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

1 个答案:

答案 0 :(得分: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