全国客服热线:4009929931
电子邮箱:info@dashen-tech.com
联系地址:
广州天河区沙太路85号金企科技园A302

OpenCV Python 绘制中文字

OpenCV Python 绘制中文字
9月 10, 2019 admin

本示例使用的OpenCV版本是:4.1.1
运行Python的编辑器:Jupyter notebook

示例目的

通过使用PLI在图片上添加中文字符。

PIL(Python Imaging Library)是Python常用的图像处理库,而Pillow是PIL的一个友好Fork,提供了了广泛的文件格式支持,强大的图像处理能力,主要包括图像储存、图像显示、格式转换以及基本的图像处理操作等。

file


实现代码

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)

显示读取到的图像

file

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)

file


程序说明

本示例,使用了第三方库PLI实现了中文文字在图像上的添加。
值得注意的有2点:

  • 数据类型的转换
    当img还是PIL.Image.Image数据时,可以在代码块中输入img,直接输出图片原图
  • 字体的存放位置

有兴趣了解 PLI 的更多应用请参考:
https://pillow.readthedocs.io/en/3.0.x/handbook/tutorial.html

0 Comments

Leave a reply

您的电子邮箱地址不会被公开。