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

推荐 《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。

举个例子

01.png

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("字体路径") 找到字体文件就行。

02.png

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

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


德育处主任
178 声望17 粉丝