绘制文本
1 绘制英文文本
-
绘制文本:cv2.putText(img, text, org, fontFace, fontScale, color[, thickness[, lineType[, bottomLeftOrigin]]])
- img 表示在那个图片上放置文本内容
- text 要绘制的文本内容
- org 文本在图片中的左下角坐标
- fontFace 字体类型即字体,通过cv2.FONT_可查看字体类型
- fontScale 字体大小
- color 字体颜色
- thickness 字体粗细
- lineType 边界类型
- bottomLeftOrigin 默认为True,表示图片数据源在左下角;为False,表示图片数据源在左上角
字体类型列举:
cv2.FONT_HERSHEY_SIMPLEX - 正常大小无衬线字体。
cv2.FONT_HERSHEY_PLAIN - 小号无衬线字体。
cv2.FONT_HERSHEY_DUPLEX - 正常大小无衬线字体比 cv2.FONT_HERSHEY_SIMPLEX 更复杂)
cv2.FONT_HERSHEY_COMPLEX - 正常大小有衬线字体。
cv2.FONT_HERSHEY_TRIPLEX - 正常大小有衬线字体 ( 比 cv2.FONT_HERSHEY_COMPLEX更复杂)
cv2.FONT_HERSHEY_COMPLEX_SMALL - cv2.FONT_HERSHEY_COMPLEX 的小译本。
cv2.FONT_HERSHEY_SCRIPT_SIMPLEX - 手写风格字体。
cv2.FONT_HERSHEY_SCRIPT_COMPLEX - 比 cv2.FONT_HERSHEY_SCRIPT_SIMPLEX 更复杂。
import cv2
import numpy as np
# 创建纯黑的背景图用来画图形
img = np.zeros((800, 800, 3), np.uint8)
# 绘制文本
cv2.putText(img, 'Hello OpenCV', (50,400), cv2.FONT_HERSHEY_COMPLEX, 2, [0, 0, 255])
cv2.imshow('draw', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
2 绘制中文文本
-
绘制中文 opencv本身不支持, 因为没有中文字体.我们可以借助pillow来实现绘制中文(曲线救国)
-
安装pillow : pip install pillow
-
导包:from PIL import ImageFont, ImageDraw, Image
-
一般步骤:
-
导入字体文件:ImageFont.truetype(font=None, size=10,index=0,encoding=‘’, layout_engine=None,)
- font 字体文件,可打开电脑C盘目录下的Windows的Fonts文件,里面有很多的字体文件,选择自己想要的拷贝到当前目录下就好,具体看第8行代码。(路径:C:\Windows\Fonts)
- size 字体大小
- index 要加载的字体(默认为第一个可用的字体)
- encoding 字体编码,默认为Unicode
- layout_engine 布局引擎
- 返回字体文件
-
创建一个pillow的图片:Image.fromarray(obj, mode=None)
- obj 导入的背景
- mode 要使用的模式
- 返回一个pillow的图片
-
绘制pillow图片:ImageDraw.Draw(im, mode=None)
- im 传入的pillow图片
- mode 要使用的模式
- 返回一个已画好的pillow图片
-
利用draw去绘制中文: draw.text(xy, text, fill=None, font=None)
- xy 文字的坐标
- text 要绘制的文本内容
- fill 文本的颜色
- font 字体类型
-
显示图片: cv2.imshow(winname, mat)
- winname 窗口名字
- mat 图片的数据类型,由于OpenCV里的图片的数据类型是ndarray,而PIL的图片数据类型是<class ‘PIL.Image.Image’>,因此要转成ndarray才能显示。具体看20行代码
# 使用Pillow包绘制中文文本.
from PIL import ImageFont, ImageDraw, Image
# 纯白背景
img = np.full((500, 500, 3), fill_value=255, dtype=np.uint8)
# 导入字体文件
font = ImageFont.truetype('./msyh.ttc', 35)
# 创建一个pillow的图片
img_pil = Image.fromarray(img)
# 绘制pillow图片
draw = ImageDraw.Draw(img_pil)
# 利用draw去绘制中文
draw.text((100, 250), '人生苦短,我用Python', font=font, fill=(0, 255, 0))
# 重新变回ndarray
img = np.array(img_pil)
cv2.imshow('img' ,img)
cv2.waitKey(0)
cv2.destroyAllWindows()
附OpenCV目录:OpenCV总目录学习笔记
智科专业小白,写博文不容易,如果喜欢的话可以点个赞哦!