如何在Python-OpenCV中实现韩文输出?针对报错代码寻求解决方法
解决OpenCV putText无法打印韩文的问题
我帮你搞定这个韩文打印的问题!OpenCV自带的字体(比如cv2.FONT_HERSHEY_SIMPLEX)并不支持韩文字符集,所以直接用cv2.putText绘制韩文时会报错或者出现乱码。我们需要借助OpenCV的FreeType模块来加载支持韩文的字体文件,具体步骤如下:
步骤1:准备支持韩文的字体文件
你可以使用系统自带的韩文字体,比如Windows的malgun.ttf(路径一般是C:/Windows/Fonts/malgun.ttf),或者下载开源的韩文字体如Noto Sans KR。确保你知道字体文件的完整路径。
步骤2:替换原代码中的文本绘制逻辑
用OpenCV的FreeType模块加载字体,然后调用其putText方法来绘制韩文(以及其他字符)。修改后的代码如下:
import cv2 # 初始化FreeType字体加载器 ft = cv2.freetype.createFreeType2() # 替换成你的韩文字体文件路径 font_path = 'C:/Windows/Fonts/malgun.ttf' # Windows示例路径 # font_path = '/usr/share/fonts/truetype/noto/NotoSansKR-Regular.ttf' # Linux示例路径 ft.loadFontData(fontFileName=font_path, id=0) # 你的原有逻辑保持不变 if consecutive == 2 and res not in ['nothing']: if res == 'space': sequence += ' ' elif res == 'del': sequence = sequence[:-1] else: cnt += 1 sequence += res if cnt == 3: sequence = sequence[:-3] sequence += '안' cnt = 0 consecutive = 0 i += 1 # 替换原cv2.putText为FreeType的putText方法 # 绘制识别结果(英文/数字) ft.putText(img=img, text=res.upper(), org=(100, 400), fontHeight=40, # 字体大小(像素单位,对应原代码的缩放比例4) color=(255, 255, 255), thickness=4, line_type=cv2.LINE_AA, bottomLeftOrigin=False) # 绘制分数 ft.putText(img=img, text=f'(score = %.5f)' % float(score), org=(100, 450), fontHeight=20, # 对应原代码的缩放比例1 color=(255, 255, 255), thickness=1, line_type=cv2.LINE_AA, bottomLeftOrigin=False) # 如果需要绘制拼接后的sequence(包含韩文),同样用这个方法 ft.putText(img=img, text=sequence, org=(100, 500), fontHeight=30, color=(255, 255, 255), thickness=2, line_type=cv2.LINE_AA, bottomLeftOrigin=False) # 原有后续逻辑保持不变 mem = res cv2.rectangle(img, (x1, ...
关键注意事项
- 字体路径:一定要替换成你本地实际的字体文件路径,否则会报错找不到字体。
- 字体大小对应:FreeType的
fontHeight参数是像素单位,和原cv2.putText的缩放比例参数不同,需要根据实际显示效果调整数值。 - OpenCV版本:确保你的OpenCV版本支持FreeType模块,一般OpenCV 3.0以上版本默认包含该模块;如果没有,可能需要重新编译OpenCV并启用FreeType支持。
这样修改后,就能正常绘制韩文字符了,不会再出现报错的情况!
内容的提问来源于stack exchange,提问作者Jaemin jung
相关产品推荐
相关产品推荐

