You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu下Python3+OpenCV2中EasyOCR韩文识别后显示问号的问题问询

解决OpenCV绘制韩文显示问号的问题

问题原因

OpenCV的cv2.putText默认使用的字体(如FONT_HERSHEY_SIMPLEX)不包含韩文字符集,无法正常渲染韩文,因此会显示为问号。

解决方案

方法1:使用支持韩文的外部字体文件

准备一个支持韩文的字体文件(比如NanumGothic.ttf这类常用韩文字体),通过OpenCV的FreeType模块加载自定义字体来绘制文字:

import cv2

# 加载自定义韩文字体
font_path = "NanumGothic.ttf"  # 替换为你的字体文件实际路径
ft2 = cv2.freetype.createFreeType2()
ft2.loadFontData(fontFileName=font_path, id=0)

# 遍历识别结果时替换原cv2.putText逻辑
for (bbox, text, prob) in results:
    # ... 解析边界框、绘制矩形框的代码保持不变 ...
    # 用FreeType绘制韩文
    ft2.putText(img=image,
                text=text,
                org=(tl[0], tl[1] - 10),
                fontHeight=20,  # 对应原代码中0.8的缩放比例,可按需调整
                color=(0, 255, 0),
                thickness=2)

方法2:借助PIL库绘制文字后转回OpenCV格式

利用PIL对多语言字体的良好支持,先将OpenCV图像转为PIL格式绘制文字,再转回OpenCV格式:

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

# 准备韩文字体
font_path = "NanumGothic.ttf"  # 替换为你的字体文件路径
font = ImageFont.truetype(font_path, 20)  # 20为字体大小,可按需调整

# 将OpenCV图像转为PIL格式(注意颜色通道转换:OpenCV是BGR,PIL是RGB)
image_pil = Image.fromarray(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
draw = ImageDraw.Draw(image_pil)

for (bbox, text, prob) in results:
    # ... 解析边界框、绘制矩形框的代码保持不变 ...
    # 用PIL绘制韩文,调整y轴位置避免遮挡
    draw.text((tl[0], tl[1] - 30), text, font=font, fill=(0, 255, 0))

# 将PIL图像转回OpenCV格式
image = cv2.cvtColor(np.array(image_pil), cv2.COLOR_RGB2BGR)

注意事项

  • 确保字体文件路径正确,可从系统字体目录中获取韩文字体(比如Windows的C:\Windows\Fonts、Linux的/usr/share/fonts)。
  • 方法1需要OpenCV包含FreeType模块,若缺失需重新编译安装带FreeType支持的OpenCV;方法2需提前安装PIL库,执行pip install pillow即可。

内容的提问来源于stack exchange,提问作者Khawar Islam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 05:33:22