我们可以加载一个自定义的TrueType字体并将其与cv2.putText函数一起使用吗?
cv2.putText
font = cv2.FONT_HERSHEY_SIMPLEXcv2.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2,cv2.LINE_AA)
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2,cv2.LINE_AA)
字符串
pes8fvy91#
在OpenCV中,仅支持Hershey字体的一个子集。在opencv2/core.hpp中,您可以找到此枚举HersheyFonts。
opencv2/core.hpp
//! Only a subset of Hershey fontsenum 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};
//! 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
};
字符串如果你想使用自定义字体,你可以试试PIL.ImageFont。下面是一个基本的例子:
import numpy as npfrom PIL import ImageFont, ImageDraw, Imageimport cv2import time## Make canvas and set the colorimg = 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)
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)
型
的数据
30byixjq2#
对于新的查看器,OpenCV通过FreeType2类支持自定义字体,自OpenCV 3.0.0起。
kcrjzv8t3#
x1c 0d1x的数据你也可以使用pilasOPENCV库,在https://github.com/bunkahle/PILasOPENCV中找到,将truetype字体与Python OpenCV结合使用。不需要PIL或Pillow。该模块依赖于freetype-py库。字体将像这样导入:
from __future__ import print_functionimport PILasOPENCV as Imageimport PILasOPENCV as ImageDrawimport PILasOPENCV as ImageFontimport cv2# was: from PIL import Image, ImageDraw, ImageFontfont = 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()
from __future__ import print_function
import PILasOPENCV as Image
import PILasOPENCV as ImageDraw
import PILasOPENCV as ImageFont
# 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函数的 Package 器,但在内部与OpenCV一起工作。
ipakzgxi4#
为了补充@Pavlos Fragkiadoulakis的答案:这里有一个使用OpenCV 4.8.0在Python中创建带有文本和自定义字体的空二进制图像的示例。
import cv2 as cvimport numpy as nptext = str(-1.234)font_height = 400thickness = 1# load font and check text sizeft = cv.freetype.createFreeType2()ft.loadFontData("Seven Segment.ttf", 0)width, height = ft.getTextSize(text, font_height, thickness)[0]# create empty white image (slightly bigger than text size)binary_image = np.ones((int(1.05*height), int(1.05*width)), dtype=np.uint8) * 255# adjust text positioningtext_origin = (0, height+5)# add text to imageft.putText(binary_image, text, text_origin, font_height, (0, 0, 0), thickness, cv.LINE_8, True)# display imagecv.imshow("", binary_image)cv.waitKey()
import cv2 as cv
text = str(-1.234)
font_height = 400
thickness = 1
# load font and check text size
ft = cv.freetype.createFreeType2()
ft.loadFontData("Seven Segment.ttf", 0)
width, height = ft.getTextSize(text, font_height, thickness)[0]
# create empty white image (slightly bigger than text size)
binary_image = np.ones((int(1.05*height), int(1.05*width)), dtype=np.uint8) * 255
# adjust text positioning
text_origin = (0, height+5)
# add text to image
ft.putText(binary_image, text, text_origin, font_height, (0, 0, 0), thickness, cv.LINE_8, True)
# display image
cv.imshow("", binary_image)
cv.waitKey()
4条答案
按热度按时间pes8fvy91#
在OpenCV中,仅支持Hershey字体的一个子集。
在
opencv2/core.hpp
中,您可以找到此枚举HersheyFonts。字符串
如果你想使用自定义字体,你可以试试PIL.ImageFont。
下面是一个基本的例子:
型
的数据
30byixjq2#
对于新的查看器,OpenCV通过FreeType2类支持自定义字体,自OpenCV 3.0.0起。
kcrjzv8t3#
x1c 0d1x的数据
你也可以使用pilasOPENCV库,在https://github.com/bunkahle/PILasOPENCV中找到,将truetype字体与Python OpenCV结合使用。不需要PIL或Pillow。该模块依赖于freetype-py库。字体将像这样导入:
字符串
这个库是围绕常用PIL函数的 Package 器,但在内部与OpenCV一起工作。
ipakzgxi4#
为了补充@Pavlos Fragkiadoulakis的答案:这里有一个使用OpenCV 4.8.0在Python中创建带有文本和自定义字体的空二进制图像的示例。
字符串