解决OpenCV中文乱码问题,cv2.putText()支持中文的方法

目录

1、背景

2、原因

3、解决方法

一、转换为Pillow

二、使用FreeType

三、使用Pygame


1、背景

  这些天在做视觉识别的任务,需要使用cv2.putText()来将中文文本绘制出来,于是发现cv2这么强大的视觉库居然连中文都不支持。比如我段示例代码,当文本是中文汉字时,出来的居然是???

import cv2

img = cv2.imread("img.png")
cv2.putText(img, '中文文本', (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (51, 51, 51), 2)
cv2.imshow("Chinese", img)
cv2.waitKey()

2、原因

  cv2.putText 基于 OpenCV 的底层绘制函数,这些函数通常只支持单字节的 ASCII 字符集,无法识别和处理像中文这样的多字节字符。

3、解决方法

    看了很多网上的资料,以及询问了很多AI的意见,我发现都不能满足我的要求。解决方法都是:

一、转换为Pillow

二、使用FreeType

三、使用Pygame

     上面的三种方法都能解决中文乱码的问题,我也成功显示了中文结果。但是我的项目涉及视频处理,对于实时性要求比较高,以上的三种方法对我而言都不理想,因为都大幅增加了处理的时间,比如当我使用Pillow绘制文本时,总时长为60秒的视频,只做处理不绘制任何文本的情况下用时18-20秒,但绘制文本后居然用了30-33秒。也就是说绘制文本居然增加了50%的用时,这对于实时性要求高的场景明显不合理。上面的三种解决方法都会大幅增加用时,具体的用时为Pillow>Pygame>FreeType。经过我实验下来,我发现OpenCV读取视频并保存视频不做任何处理的情况下用时5-6秒,使用cv2.putText()绘制文本用时只增加2-4秒。所以我决定找到使用cv2.putText()绘制中文文本的方法。终于在知乎的一篇文章听说putText()支持中文了?! - 知乎里找到解决方法

四、真正的解决方法

先卸载OpenCV

pip uninstall opencv-python

然后安装opencv_rolling版本

pip install opencv-python-rolling

再次测试代码,发现可以正常显示中文了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值