『OpenCV-Python』绘制文字

点赞 + 关注 + 收藏 = 学会了

推荐 《OpenCV-Python专栏》

绘制文字(数字和英文)

OpenCV 提供了 cv2.putText() 方法,可以方便地在图像上绘制文本。

cv2.putText() 的基本用法:

cv2.putText(img, text, org, fontFace, fontScale, color, thickness, lineType)
  • img:目标图像。

  • text:要绘制的文字。

  • org:文字左下角的起始坐标。

  • fontFace:字体类型(如 cv2.FONT_HERSHEY_SIMPLEX)。fontFace 可传入的字体类型 OpenCV 也提供了选项:

    • cv2.FONT_HERSHEY_SIMPLEX:无衬线字体(常用)。
    • cv2.FONT_HERSHEY_PLAIN:简单无衬线字体。
    • cv2.FONT_HERSHEY_DUPLEX:双线无衬线字体。
    • cv2.FONT_HERSHEY_COMPLEX:衬线字体。
    • cv2.FONT_HERSHEY_TRIPLEX:三线衬线字体。
    • cv2.FONT_HERSHEY_SCRIPT_SIMPLEX:手写字体。
    • cv2.FONT_HERSHEY_SCRIPT_COMPLEX:复杂手写字体。
  • fontScale:字体大小比例。

  • color:文字颜色,格式为 (B, G, R)。

  • thickness:文字线条粗细。

  • lineType:线型,如 cv2.LINE_AA。

举个例子

『OpenCV-Python』绘制文字

import cv2
import numpy as np

# 创建空白图像
img = np.zeros((400, 400, 3), dtype=np.uint8)
img.fill(255)  # 将背景设置为白色

# 绘制不同样式的文字
cv2.putText(img, "Hello OpenCV!", (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 0), 2)  # 黑色简单字体
cv2.putText(img, "Hello OpenCV!", (50, 100), cv2.FONT_HERSHEY_DUPLEX, 1, (255, 0, 0), 2)  # 蓝色粗体
cv2.putText(img, "Hello OpenCV!", (50, 150), cv2.FONT_ITALIC, 1, (0, 255, 0), 2)  # 绿色斜体
cv2.putText(img, "Hello OpenCV!", (50, 200), cv2.FONT_HERSHEY_COMPLEX, 1, (0, 0, 255), 2, cv2.LINE_AA)  # 红色复杂字体,抗锯齿

# 显示图像
cv2.imshow('Text Drawing', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

绘制中文

OpenCV 默认只支持绘制英文字母、数字和常见标点符号,无法直接绘制中文。

如果需要在图像上绘制中文,通常需要结合第三方库如 PIL 或使用自定义字体文件。

本文给出的方案是引入一个本地的中文字体包。我使用的是Mac自带的中文字体 Hiragino Sans GB.ttc。

将字体文件放到项目目录中(放其他地方也行,只要你能通过 ImageFont.truetype("字体路径") 找到字体文件就行。

『OpenCV-Python』绘制文字

from PIL import Image, ImageDraw, ImageFont
import cv2
import numpy as np

# 创建空白图像
img = np.zeros((400, 400, 3), dtype=np.uint8)

# 转换为 PIL 图像
pil_img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))

# 使用 PIL 绘制中文
draw = ImageDraw.Draw(pil_img)
font = ImageFont.truetype("Hiragino Sans GB.ttc", 40)  # 替换为你的字体路径
draw.text((50, 100), "雷猴", font=font, fill=(255, 255, 255))

# 转换回 OpenCV 图像
img = cv2.cvtColor(np.array(pil_img), cv2.COLOR_RGB2BGR)

# 显示图像
cv2.imshow("Chinese Text", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

点赞 + 关注 + 收藏 = 学会了

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!