目前我的项目使用OpenCV来处理图片,绘制一些信息然后通过ffmpeg将视频帧推送出去,因为是直播流形式的推送,单帧的处理速度很高,处理速度慢,它会导致推出视频流丢帧。排除故障后,比较耗时的过程就是绘制汉字的过程。因为OpenCV不支持绘制汉字,所以我每次绘制的时候都使用Pillow来转换图像格式,绘制完之后再将Pillow图像转换回numpy格式。以下是绘制汉字的关键代码步骤:
cv2_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
pil_img = Image.fromarray(cv2_img)
draw = ImageDraw.Draw(pil_img)
font = ImageFont.truetype("simhei.ttf", 15, encoding="utf-8")
delta_y = 20
draw.text((x, y + delta_y), f"中文xxxxx", (255, 255, 255), font=font)
img = cv2.cvtColor(np.array(pil_img), cv2.COLOR_RGB2BGR)
以下解决方案已知有效:
当然还有其他的解决方案,如果有满足我高处理速度要求的程序,欢迎大哥给予参考。
你的问题有几个方面我无法弄清楚,所以这里有一些一般性的想法:
PIL.Image
,您可能会自行传递它们PIL.Image
- 您可以在视频开头创建一个,然后在每一帧的开头用黑色填充它,然后在其上绘制文本 - 您不需要然后为每个帧创建一个新的绘图上下文