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

    • 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总目录学习笔记

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aaron-ywl

你的鼓励是我创作的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值