Skip to content

[text]绘制中文字符

使用putText时发现中文字符会出现乱码。在网上找了很多资料

总结下来共4种实现方式:

  1. 先转成PIL格式,再进行中文字符绘制,最后再转回Numpy数组
  2. 直接使用Freetype库进行图像绘制
  3. 自编译skvark/opencv-python,加入FREETYPE模块
  4. 自编译OpenCV源码,加入FREETYPE模块

上面四种实现方式的绘制速度依次是1 < 2 < 3 < 4,其中,后两种的实现参考

使用freetype进行中文字符绘制:

import cv2
import time
import numpy as np

img = np.zeros((300, 512, 3), dtype=np.uint8)

ft = cv2.freetype.createFreeType2()
ft.loadFontData(fontFileName='/home/zj/work/expressbill/PaddleOCR/doc/simfang.ttf', id=0)

start = time.time()
ft.putText(img=img,
           text='Quicfadf发达发afd3142 Fox',
           org=(15, 70),
           fontHeight=30,
           color=(255, 255, 255),
           thickness=-1,
           line_type=cv2.LINE_AA,
           bottomLeftOrigin=True)
print('freetype need: {}'.format(time.time() - start))

cv2.imshow('img', img)
cv2.waitKey(0)
cv2.imwrite('image.png', img)
################## 输出
freetype need: 0.00032019615173339844