Python 将TrueType字体加载到OpenCV

Python 将TrueType字体加载到OpenCV,python,opencv,Python,Opencv,我们可以加载自定义TrueType字体并将其与cv2.putText函数一起使用吗 font = cv2.FONT_HERSHEY_SIMPLEX cv2.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2,cv2.LINE_AA) 在OpenCV中,仅支持Hershey字体的子集 在opencv2/core.hpp中,您可以找到此枚举HersheyFonts //! Only a subset of Hershey fonts enu

我们可以加载自定义TrueType字体并将其与
cv2.putText
函数一起使用吗

font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2,cv2.LINE_AA)

在OpenCV中,仅支持Hershey字体的子集

opencv2/core.hpp
中,您可以找到此枚举HersheyFonts

//! Only a subset of Hershey fonts
enum HersheyFonts {
    FONT_HERSHEY_SIMPLEX        = 0, //!< normal size sans-serif font
    FONT_HERSHEY_PLAIN          = 1, //!< small size sans-serif font
    FONT_HERSHEY_DUPLEX         = 2, //!< normal size sans-serif font (more complex than FONT_HERSHEY_SIMPLEX)
    FONT_HERSHEY_COMPLEX        = 3, //!< normal size serif font
    FONT_HERSHEY_TRIPLEX        = 4, //!< normal size serif font (more complex than FONT_HERSHEY_COMPLEX)
    FONT_HERSHEY_COMPLEX_SMALL  = 5, //!< smaller version of FONT_HERSHEY_COMPLEX
    FONT_HERSHEY_SCRIPT_SIMPLEX = 6, //!< hand-writing style font
    FONT_HERSHEY_SCRIPT_COMPLEX = 7, //!< more complex variant of FONT_HERSHEY_SCRIPT_SIMPLEX
    FONT_ITALIC                 = 16 //!< flag for italic font
};

您还可以使用位于的库Pilasopensv将truetype字体与Python OpenCV结合使用。不需要PIL或枕头。该模块取决于库freetypy。字体将按如下方式导入:

from __future__ import print_function
import PILasOPENCV as Image
import PILasOPENCV as ImageDraw
import PILasOPENCV as ImageFont
import cv2
# was: from PIL import Image, ImageDraw, ImageFont

font = ImageFont.truetype("arial.ttf", 18)
print(font)
im = Image.open("lena.jpg")
draw = ImageDraw.Draw(im)
text = "Lena's image"
draw.text((249,455), text, font=font, fill=(0, 0, 0))
# in PIL:
# print(font.getsize(text))
# mask = font.getmask(text)
print(ImageFont.getsize(text, font))
mask = ImageFont.getmask(text, font)
print(type(mask))
cv2.imshow("mask", mask)
im.show()

此库是常用PIL函数的包装器,但在OpenCV内部工作。

对于新的查看器,OpenCV通过FreeType2类支持OpenCV 3.0.0以来的自定义字体。请参阅这里的一些不错的示例代码:

有人获得了这方面的python代码片段吗?我无法让它为Python工作,您需要安装
opencv contrib Python
模块。请参阅以获取代码示例。请注意:opencv的预构建控制盘并不总是包含这些freetype类。在我的Mac电脑上,它们可以,但在Linux上却不能。
from __future__ import print_function
import PILasOPENCV as Image
import PILasOPENCV as ImageDraw
import PILasOPENCV as ImageFont
import cv2
# was: from PIL import Image, ImageDraw, ImageFont

font = ImageFont.truetype("arial.ttf", 18)
print(font)
im = Image.open("lena.jpg")
draw = ImageDraw.Draw(im)
text = "Lena's image"
draw.text((249,455), text, font=font, fill=(0, 0, 0))
# in PIL:
# print(font.getsize(text))
# mask = font.getmask(text)
print(ImageFont.getsize(text, font))
mask = ImageFont.getmask(text, font)
print(type(mask))
cv2.imshow("mask", mask)
im.show()