解决python-opencv中中文乱码情况,教你用OpenCV添加中文

1,949 阅读2分钟

OpenCV添加中文

OpenCV添加文字的方法putText(...),添加英文是没有问题的,但如果你要添加中文就会出现“???”的乱码,需要特殊处理一下。

下文提供封装好的(代码)方法,供OpenCV添加中文使用。

效果预览

在这里插入图片描述

实现思路

使用PIL的图片绘制添加中文,可以指定字体文件,那么也就是说使用PIL可以实现中文的输出。

有思路之后,接下来的工作就简单了。

  1. OpenCV图片格式转换成PIL的图片格式;
  2. 使用PIL绘制文字;
  3. PIL图片格式转换成OpenCV的图片格式;

代码分解

OpenCV图片转换为PIL图片格式

img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))

使用PIL绘制文字

draw = ImageDraw.Draw(img)
fontText = ImageFont.truetype("font/simsun.ttc", textSize, encoding="utf-8")
draw.text((left, top), "文字内容", textColor, font=fontText)

字体文件为:simsun.ttc,Windows可以在C:\Windows\Fonts下面查找。

PIL图片格式转换成OpenCV的图片格式

cv2.cvtColor(numpy.asarray(img), cv2.COLOR_RGB2BGR)

完整代码

封装好的完整方法

#coding=utf-8
#中文乱码处理

import cv2
import numpy
from PIL import Image, ImageDraw, ImageFont

def cv2ImgAddText(img, text, left, top, textColor=(0, 255, 0), textSize=20):
    if (isinstance(img, numpy.ndarray)):  #判断是否OpenCV图片类型
        img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
    draw = ImageDraw.Draw(img)
    fontText = ImageFont.truetype(
        "font/simsun.ttc", textSize, encoding="utf-8")
    draw.text((left, top), text, textColor, font=fontText)
    return cv2.cvtColor(numpy.asarray(img), cv2.COLOR_RGB2BGR)

代码调用

img = cv2ImgAddText(img, "大家好,我是星爷", 140, 60, (255, 255, 0), 20)

资源传送门

  • 关注【==做一个柔情的程序猿==】公众号
  • 在【==做一个柔情的程序猿==】公众号后台回复 【python资料】【2020秋招】 即可获取相应的惊喜哦!
  • 自己搭建的博客地址:梦魇回生的博客

「❤️ 感谢大家」

  • 点赞支持下吧,让更多的人也能看到这篇内容(收藏不点赞,都是耍流氓 -_-)
  • 欢迎在留言区与我分享你的想法,也欢迎你在留言区记录你的思考过程