场景
经常需要再opencv中输入中文, 有的时候还需要旋转.
然而, 中文和旋转都不是没有原生接口, 需要另想办法.
思路
PIL支持unicode字符, 所以将opencv图像换到PIL中.所谓的转换就是更换数据类型以及BGR和RGB的互换.
解决了中文后, PIL有没有原生的旋转字符的接口, 所以要先创建一个临时image, 在上面渲染字体后旋转整个图像再贴到原来的图上.
这里有几个小技巧.
- PIL的textsize是实例方法, 可以先创建一个任意大小的draw, 获取文字的size.
- 图片是一个灰度模式, 通过colorize函数进行灰度到三色的映射, 通过将该图本身设为掩码可以避免黑色背景.
代码
import cv2
from PIL import Image, ImageDraw, ImageFont
# -*- coding: utf-8 -*-
import cv2
import numpy as np
from PIL import Image, ImageDraw, ImageFont,ImageOps
def putText(img, text,position,size,angle,fillColor):
img_PIL = Image.fromarray(cv2.cvtColor(img_OpenCV, cv2.COLOR_BGR2RGB))
margin = 10
font = ImageFont.truetype