欢迎访问宙启技术站
智能推送

Python中使用OpenCV的putText()函数给图像添加中文文字的实例

发布时间:2023-12-19 06:09:10

在Python中使用OpenCV的putText()函数给图像添加中文文字,需要解决两个问题:中文文字的编码问题和字体渲染问题。

首先,要在图像中显示中文文字,需要保证所使用的字体支持中文字符的渲染。在Windows系统中,默认的字体是arialuni.ttf,该字体支持中文字符的显示。如果使用其他的操作系统或字体,需要确保字体文件正确配置。

其次,中文文字的编码问题。在Python中,中文字符的编码方式为UTF-8。使用OpenCV的putText()函数时,需要将中文字符转换成指定的字体编码。

下面是一个使用OpenCV的putText()函数给图像添加中文文字的实例:

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

# 读取图像
img = cv2.imread('input.jpg')

# 转换图像格式
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 在图像上添加中文文字
def add_chinese_text(img, text, position, font_size, color):
    # 使用PIL打开图像
    pil_img = Image.fromarray(img)
    draw = ImageDraw.Draw(pil_img)
    
    # 设置字体(这里使用默认的arialuni.ttf字体)
    font = ImageFont.truetype('arialuni.ttf', font_size)
    
    # 将中文字符转换成UTF-8编码
    text = text.encode('utf-8').decode('utf-8')
    
    # 在指定位置绘制文本
    draw.text(position, text, font=font, fill=color)
    
    # 将PIL图像转换回OpenCV图像
    cv2_img = cv2.cvtColor(np.array(pil_img), cv2.COLOR_RGB2BGR)
    return cv2_img

# 在图像上添加中文文字
text = "你好,世界!"
position = (100, 100)
font_size = 40
color = (255, 0, 0)
img_with_text = add_chinese_text(img, text, position, font_size, color)

# 显示图像
cv2.imshow('image', img_with_text)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这个例子中,首先使用cv2.imread()函数读取图像,然后使用cv2.cvtColor()将图像格式从BGR转换为RGB。接下来,定义了一个add_chinese_text()函数,该函数使用PIL库中的ImageDraw和ImageFont模块来给图像添加中文文字。

在add_chinese_text()函数中,使用Image.fromarray()将图像转换为PIL图像格式,并使用ImageDraw.Draw()创建一个可绘制对象。然后,使用ImageFont.truetype()设置字体。在这个例子中,使用默认的arialuni.ttf字体,并将中文字符转换成UTF-8编码。

最后,使用draw.text()在指定位置绘制中文文字,并将绘制好的PIL图像转换回OpenCV图像格式。

在主函数中,定义了要添加的中文文字的内容、位置、字体大小和颜色,并调用add_chinese_text()函数来添加中文文字。最后,使用cv2.imshow()显示带有中文文字的图像。

注意:为了让OpenCV正确显示已经添加了中文文字的图像,需要在显示图像之前,将图像的颜色通道从RGB转换为BGR。