OpenCV实现图像上添加汉字

OpenCV添加文字的方法putText(...),添加英文是没有问题的,但如果想要添加中文就会出现“???”的乱码,这是因为opencv不支持中文显示,因此需要特殊处理一下。

实现思路

首先将图像转换为PIL格式,然后使用PIL来渲染中文文本,最后将渲染后的图像再转换回OpenCV格式。

第一步,OpenCV图片格式转换成PIL的图片格式。

这一行将OpenCV图像从BGR颜色空间转换为RGB颜色空间,并使用PIL库创建一个PIL图像对象

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

第二步,使用PIL绘制文字。

font = ImageFont.truetype(font='msyh.ttc', size=36) 
draw = ImageDraw.Draw(img_pil)                                   
draw.text(pos, text, font=font, fill=(255, 0, 0))

第三步,PIL图片格式转换成OpenCV的图片格式。 

mg_cv = np.array(img_pil)                         
img = cv2.cvtColor(img_cv, cv2.COLOR_RGB2BGR)  
完整代码
import cv2
import numpy as np
from PIL import Image, ImageDraw, ImageFont
# 由于opencv不支持中文显示,首先将图像转换为PIL格式,然后使用PIL来渲染中文文本,最后将渲染后的图像再转换回OpenCV格式



def show_chinese(img, text, pos):
    """
    :param img: opencv 图片
    :param text: 显示的中文字体
    :param pos: 显示位置
    :return:    带有字体的显示图片(包含中文)
    """
    img_pil = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))  # 这一行将OpenCV图像从BGR颜色空间转换为RGB颜色空间,并使用PIL库创建一个PIL图像对象
    font = ImageFont.truetype(font='msyh.ttc', size=36)              # 该字体文件通常包含中文字符
    draw = ImageDraw.Draw(img_pil)                                   # 创建一个PIL图像的绘图对象draw,以便在图像上绘制文本。
    draw.text(pos, text, font=font, fill=(255, 0, 0))  # PIL中RGB=(255,0,0)表示红色
    img_cv = np.array(img_pil)                         # PIL图片转换为numpy,以便进一步用opencv处理
    img = cv2.cvtColor(img_cv, cv2.COLOR_RGB2BGR)      # PIL格式转换为OpenCV的BGR格式
    return img




if __name__ == '__main__':
    img = cv2.imread('001.jpg')
    text = '中文'
    img = show_chinese(img, text, (140, 60))
    cv2.imshow('Image', img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()








参考博客

博客1博客2

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在图像添加中文文字,你可以使用OpenCVPython中的中文字体文件。下面是一个示例代码,演示了如何在图像添加中文文字: ```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)并准备了一张图像和一个中文字体文件。根据需要,你可以调整文字的内容、字体、大小和颜色以实现更多样化的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值