使用opencv写入中文时,用以下代码会导致乱码:
cv2.putText(im0, f"{label}:{score}", (xmin, ymin), cv2.FONT_HERSHEY_SIMPLEX, 2, (0,255,0), 3)
因此需要借助PIL库写入中文字符,用法如下:
import cv2
from PIL import Image, ImageDraw, ImageFont
import numpy as np
def cv2AddChineseText(img, text, position, textColor=(0, 255, 0), textSize=30):if (isinstance(img, np.ndarray)): # 判断是否OpenCV图片类型img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))# 创建一个可以在给定图像上绘图的对象draw = ImageDraw.Draw(img)# 字体的格式fontStyle = ImageFont.truetype("HYSongYunLangHeiW-1.ttf", textSize, encoding="utf-8")# 绘制文本draw.text(position, text, textColor, font=fontStyle)# 转换回OpenCV格式return cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)
字体文件:https://download.csdn.net/download/yangsn0719/89689325
然后在用下面这句代替原来的用cv2.putText写入文本的语句就可以啦
img1 = cv2AddChineseText(img0, f"{label}:{score}", (xmin, ymin), textColor=(0,255,0), textSize=fontsize)
过程中,我的环境中PIL库报错ImportError: The _imagingft C module is not installed
解决方法是:
重新安装pillow,先卸载已有的pillow
$ pip3 uninstall pillow
再安装相关库
$ sudo apt install libjpeg-dev
$ sudo apt install libfreetype6-dev
$ sudo apt install zlib1g-dev
$ sudo apt install libpng-dev
然后,安装pillow
$ pip3 install pillow
之后就没有这个问题了。