OpenCV汉字输出

lemon Lv4

在 Python 中,matplotlibopencv-pythoncv2)是两套独立的库,它们的字体配置互不影响。你遇到的 cv2.imshow 显示中文失败的问题,需要从以下两个方向排查和解决:


1. OpenCV 本身不支持直接渲染中文

OpenCV 的 cv2.putText() 函数默认不支持 Unicode 字符(包括中文),直接传递中文字符串会导致乱码或显示异常。而 cv2.imshow() 显示图像时,如果图像本身包含未正确渲染的文本,自然无法正确显示中文。


2. 解决方案:使用 PIL 渲染中文

使用 PIL(Python Imaging Library)绘制中文 **

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from PIL import Image, ImageDraw, ImageFont  
import cv2
import numpy as np

# 读取图像
img = cv2.imread("image.png") #我的这个是一张空白图片
img_pil = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))

# 创建绘图对象
draw = ImageDraw.Draw(img_pil)
font = ImageFont.truetype("simhei.ttf", 40) # 指定中文字体文件

# 绘制中文
draw.text((50, 50), "你好,世界!", font=font, fill=(255, 0, 0))

# 转换回OpenCV格式
img = cv2.cvtColor(np.array(img_pil), cv2.COLOR_RGB2BGR)

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

a

关键注意事项

  1. 字体文件路径

    • 确保系统中存在中文字体文件(如 simhei.ttf),Windows 系统通常位于 C:\Windows\Fonts,Linux/Mac 需手动安装。
    • 免费下载字体的网站,比如 [字体家] : http://www.zitijia.com
  2. OpenCV 版本

    • cv2.freetype 需要 OpenCV 编译时启用 opencv_contrib 模块。如果使用预编译的 OpenCV 包,可能不支持此功能。
  3. 编码问题

    • 确保 Python 文件本身保存为 UTF-8 编码(避免中文字符串被错误解析)。

总结

  • plt.rcParams['font.sans-serif'] 仅影响 matplotlib 的绘图,与 cv2 无关。
  • 要在 OpenCV 中显示中文,需通过 PIL 或 cv2.freetype 手动渲染文本到图像上。
  • 始终确保字体文件路径正确,且编码环境支持中文。
  • 标题: OpenCV汉字输出
  • 作者: lemon
  • 创建于 : 2025-04-14 13:11:46
  • 更新于 : 2025-04-14 13:32:01
  • 链接: https://lemon2003.github.io/post/20250414131146.html
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论