OpenCV汉字输出

lemon Lv5

在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 进行许可。
评论