给图片添加文本信息是非常常见的需求,通常需要添加的文本信息分为中文文字或者是非中文的文字,比如数字和英文,对这两类的实现方法也有所不同,非中文的文本信息可以直接用 opencv
实现,而中文文本需要使用 PIL
,因为 opencv
不支持中文。
所以接下来就分别介绍这两种实现方法。
opencv
添加文本信息的函数是 putText
,实现代码如下所示,这个函数的参数主要是:
tuple
元组类型import cv2
%matplotlib inline
import matplotlib.pyplot as plt
# opencv
img = cv2.imread('plane.jpg')
# 添加的文字
text = 'plane'
# 文字起始的位置
position = (600, 100)
# 字体大小
font_scale = 3
# 字体颜色
font_color = (0, 0, 255)
# 默认字体
font=cv2.FONT_HERSHEY_SIMPLEX
# 线的粗细
thickness = 3
cv2.putText(img, text, position, font, font_scale, font_color, thickness, cv2.LINE_AA)
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
结果如下所示:
如果是中文文字,那么就必须用 PIL 来实现了,同样先上实现的代码:
from PIL import Image, ImageDraw, ImageFont
%matplotlib inline
import matplotlib.pyplot as plt
# PIL 绘制中文
img = Image.open('plane.jpg')
# 自定义字体
font = ImageFont.truetype("/System/Library/Fonts/PingFang.ttc", 60)
draw = ImageDraw.Draw(img)
# 文字起始坐标
position = (600, 100)
# 文字
text = '纸飞机'
# 文字颜色
color = (0, 0, 255)
draw.text(position, text, font=font, fill=color)
plt.imshow(img)
结果如下所示:
基本的参数其实和 opencv
的函数一样,同样需要指定文字、字体、起始位置、字体大小和颜色,其中字体可以是自定义的字体,在官方文档中给出了不同系统自带字体存放的位置:
c:\Windows\Fonts\
/Library/Fonts/
, /System/Library/Fonts/
或者是 ~/Library/Fonts/
/usr/share/fonts/
https://pillow.readthedocs.io/en/stable/reference/ImageFont.html#PIL.ImageFont.truetype