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
相关产品推荐
相关产品推荐

