思路:1. 先把opencv读的图片转化为PIL的格式;
2. 用PIL在图片上写上汉字;
3. 把PIL格式的图片转化回opencv的格式。
直接上代码:
# --*-- coding:utf-8 -*-
import cv2
import numpy as np
from PIL import Image,ImageDraw,ImageFont
def draw_box_string(img, box, string):
"""
img: read by cv;
box:[xmin, ymin, xmax, ymax];
string: what you want to draw in img;
return: img
"""
x,y,x1,y1 = box
cv2.rectangle(img, (x,y), (x1, y1), (0,0,255), 2)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img = Image.fromarray(img)
draw = ImageDraw.Draw(img)
# simhei.ttf 是字体,你如果没有字体,需要下载
font = ImageFont.truetype("simhei.ttf", 20, encoding="utf-8")
draw.text((x, y-20), string, (0, 255, 0), font=font)
img = cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR)
return img
if __name__ == "__main__":
img_path = "test.jpg"
img = cv2.imread(img_path)
box = [9, 107, 499, 263]
string = "飞机"
img = draw_box_string(img, box, string)
cv2.imwrite("airplane.jpg", img)
原图(test.jpg):

写上汉字的图(airplane.jpg):

如果你没有中文字体,请下载(很小):链接: https://pan.baidu.com/s/1p2NUz1Y9e5isxq_mHHjUEA 提取码: 3phc