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)
  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在图像上添加中文文字,你可以使用OpenCV和Python中的中文字体文件。下面是一个示例代码,演示了如何在图像上添加中文文字: ```python import cv2 import numpy as np from PIL import ImageFont, ImageDraw, Image # 读取图像 image = cv2.imread("image.jpg") image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) image_pil = Image.fromarray(image) # 转换为PIL的ImageDraw对象 draw = ImageDraw.Draw(image_pil) # 字体文件路径 font_path = "font.ttf" # 字体大小 font_size = 30 # 中文文字内容 text = "中文文字" # 加载中文字体文件 font = ImageFont.truetype(font_path, font_size) # 文字颜色 text_color = (255, 0, 0) # 获取文字尺寸 text_width, text_height = draw.textsize(text, font=font) # 文字位置 x = (image.shape[1] - text_width) // 2 y = (image.shape[0] - text_height) // 2 # 在图像上绘制中文文字 draw.text((x, y), text, font=font, fill=text_color) # 转换回OpenCV格式的图像 image_with_text = np.array(image_pil) image_with_text = cv2.cvtColor(image_with_text, cv2.COLOR_RGB2BGR) # 显示图像 cv2.imshow("Image with Text", image_with_text) cv2.waitKey(0) cv2.destroyAllWindows() ``` 在这个示例中,我们首先使用OpenCV读取了图像(假设为"image.jpg"),然后将图像转换为PIL的Image格式,这样就可以使用PIL库中的ImageDraw对象进行绘制。接下来,我们定义了要添加中文文字内容、字体文件路径和字体大小。然后,我们使用ImageFont.truetype函数加载中文字体文件,并使用draw.textsize函数获取文字的尺寸。接着,我们计算了文字的位置,并使用draw.text函数将中文文字绘制在图像上。最后,我们将绘制完成的图像转换回OpenCV格式,并显示出来。 请确保你已经安装了Pillow库(pip install Pillow)并准备了一张图像和一个中文字体文件。根据需要,你可以调整文字的内容、字体、大小和颜色以实现更多样化的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值