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)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏hightopo

基于 HTML5 WebGL 的 3D 网络拓扑结构图

29320
来自专栏AI派

带你十分钟快速入门画图神器 Matplotlib

在开始正式介绍 Matplotlib 用法之前,先来简单了解下 Matplotlib。

22410
来自专栏用户2442861的专栏

Python-OpenCV 处理图像(一):基本操作

第一种方式使用cv2.cv的LoadImage、ShowImage和SaveImage函数

21820
来自专栏hightopo

根据矩阵变化实现基于 HTML5 的 WebGL 3D 自动布局

17030
来自专栏抠抠空间

python模块之PIL模块(生成随机验证码图片)

PIL简介 什么是PIL PIL:是Python Image Library的缩写,图像处理的模块。主要的类包括Image,ImageFont,ImageDra...

66890
来自专栏素质云笔记

python︱利用dlib和opencv实现简单换脸、人脸对齐、关键点定位与画图

这是一个利用dlib进行关键点定位 + opencv处理的人脸对齐、换脸、关键点识别的小demo。原文来自于《Switching Eds: Face swapp...

2K100
来自专栏Code_iOS

OpenGL ES 2.0 (iOS)[06-1]:基础纹理

Texture 在 OpenGL 里面有很多种类,但在 ES 版本中就两种——Texture_2D + Texture_CubeMap;

23520
来自专栏章鱼的慢慢技术路

OpenGL基本框架与三维对象绘制

17520
来自专栏章鱼的慢慢技术路

用OpenGL实现动态的立体时钟

72950
来自专栏深度学习计算机视觉

opencv的初步使用(高斯模糊、边缘检测、灰度化、二值化、闭运算、绘制边缘)

前提:已经配好了opencv+Qt 这里只讲如何使用api,不怎么讲算法原理 既然要用opencv的库,首先把相应的头文件导进去吧 #include <ope...

50350

扫码关注云+社区

领取腾讯云代金券