OpenCV学习笔记5-绘制文本(附代码实现)

绘制文本

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,)

    扫描二维码关注公众号,回复: 14189727 查看本文章
    • 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总目录学习笔记

智科专业小白,写博文不容易,如果喜欢的话可以点个赞哦!请添加图片描述

猜你喜欢

转载自blog.csdn.net/weixin_56197703/article/details/123907655