我们可以加载自定义TrueType字体并将其与cv2.putText函数一起使用吗?
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2,cv2.LINE_AA)
Run Code Online (Sandbox Code Playgroud)
Pav*_*kis 16
对于新查看者,OpenCV 自 OpenCV 3.0.0 起通过 FreeType2 类支持自定义字体。在这里看到一些不错的示例代码:https : //docs.opencv.org/4.1.1/d9/dfa/classcv_1_1freetype_1_1FreeType2.html
在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
};
Run Code Online (Sandbox Code Playgroud)
如果要使用自定义字体,可以尝试PIL.ImageFont。
这里提供一个基本示例:
import numpy as np
from PIL import ImageFont, ImageDraw, Image
import cv2
import time
## Make canvas and set the color
img = np.zeros((200,400,3),np.uint8)
b,g,r,a = 0,255,0,0
## Use cv2.FONT_HERSHEY_XXX to write English.
text = time.strftime("%Y/%m/%d %H:%M:%S %Z", time.localtime())
cv2.putText(img, text, (50,50), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (b,g,r), 1, cv2.LINE_AA)
## Use simsum.ttc to write Chinese.
fontpath = "./simsun.ttc"
font = ImageFont.truetype(fontpath, 32)
img_pil = Image.fromarray(img)
draw = ImageDraw.Draw(img_pil)
draw.text((50, 100), "???/??? ??!", font = font, fill = (b, g, r, a))
img = np.array(img_pil)
## Display
cv2.imshow("res", img);cv2.waitKey();cv2.destroyAllWindows()
cv2.imwrite("res.png", img)
Run Code Online (Sandbox Code Playgroud)
您还可以使用位于https://github.com/bunkahle/PILasOPENCV的库 PILasOPENCV 将truetype 字体与 Python OpenCV 结合使用。不需要 PIL 或 Pillow。该模块依赖于库 freetype-py。字体将像这样导入:
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()
Run Code Online (Sandbox Code Playgroud)
该库是常用 PIL 函数的包装器,但在内部与 OpenCV 一起使用。
| 归档时间: |
|
| 查看次数: |
13478 次 |
| 最近记录: |