本示例使用的OpenCV版本是:4.1.1
运行Python的编辑器:Jupyter notebook
示例目的
通过使用PLI在图片上添加中文字符。
PIL(Python Imaging Library)是Python常用的图像处理库,而Pillow是PIL的一个友好Fork,提供了了广泛的文件格式支持,强大的图像处理能力,主要包括图像储存、图像显示、格式转换以及基本的图像处理操作等。
实现代码
1,加载并显示图片
import cv2
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image, ImageDraw, ImageFont #从PIL中加载所需要的库
img = cv2.imread('MakerOnsite-Logo.png')
plt.imshow(img)
显示读取到的图像
2,在图片上添加中文
我们需要先把字体文件放在同一工作目录下,
例如:本示例用的中英文字体是simsun.ttc。
#判断是否OpenCV图片类型,也就是numpy.ndarray数据类型
if (isinstance(img, np.ndarray)):
# 把img的numpy.ndarray数据类型格式化为PLI的Image图像数据类型
img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
# 创建一个可以在给定图像上绘图的对象
draw = ImageDraw.Draw(img)
print("img type is {}".format(type(img))) #此时观察到img数据类型是 PIL.Image.Image
# 加载字体
fontText = ImageFont.truetype("simsun.ttc", 66, encoding="utf-8")
# 在图像上添加字符,中英文皆可
# 参数概述draw.text(坐标xy,添加文字,文字颜色,字体)
draw.text((100, 40), '创客出手!', (255,100,200), font=fontText)
# 转换回OpenCV可处理的图片类型,这样之后可以继续使用OpenCV或深度学习对图像进行树立
img = np.asarray(img)
print("img type is {}".format(type(img))) # 此时观察到img数据类型是 numpy.ndarray
3,显示图像
最后显示图像,
有时看到图片的文字有锯齿是因为plt的在Jupyter notebook中显示方式把图像压缩了,
通过使用无损保存图像,在打开图片可以看到清晰的图片。
plt.imshow(img)
程序说明
本示例,使用了第三方库PLI实现了中文文字在图像上的添加。
值得注意的有2点:
- 数据类型的转换
当img还是PIL.Image.Image数据时,可以在代码块中输入img,直接输出图片原图 - 字体的存放位置
有兴趣了解 PLI 的更多应用请参考:
https://pillow.readthedocs.io/en/3.0.x/handbook/tutorial.html