OpenCV教程04:结合pillow在图片上显示中文文字

1.如果添加的内容是纯英文文字,直接使用cv2.putText 函数操作即可。但它不支持自定义字体文件,仅限于这些内置的字体样式。如果你需要更复杂的字体支持,可能需要使用其他库,如 Python Imaging Library (PIL) 或 Pillow。可用的字体列表:

python 复制代码
cv2.FONT_HERSHEY_SIMPLEX - 正常大小的无衬线字体。
cv2.FONT_HERSHEY_PLAIN - 小尺寸的无衬线字体。
cv2.FONT_HERSHEY_DUPLEX - 正常大小的无衬线字体,比 FONT_HERSHEY_SIMPLEX 更厚。
cv2.FONT_HERSHEY_COMPLEX - 正常大小的衬线字体。
cv2.FONT_HERSHEY_TRIPLEX - 正常大小的衬线字体,比 FONT_HERSHEY_COMPLEX 更厚。
cv2.FONT_HERSHEY_COMPLEX_SMALL - 较小的衬线字体。
cv2.FONT_HERSHEY_SCRIPT_SIMPLEX - 手写风格的无衬线字体。
cv2.FONT_HERSHEY_SCRIPT_COMPLEX - 手写风格的衬线字体。
cv2.FONT_ITALIC - 斜体字的标志,可以与上述任何字体结合使用,
例如 cv2.FONT_HERSHEY_SIMPLEX | cv2.FONT_ITALIC。

运行后的代码显示

python 复制代码
# -*- coding: utf-8 -*-
# @Author : 小红牛
# 微信公众号:WdPython
import cv2
import numpy as np

# 1.创建一个黑色的空白图像
img = np.zeros((600, 800, 3), np.uint8)

# 2.图像添加文字
text = 'Hello, OpenCV2024'
# 字体列表
fontList = [cv2.FONT_HERSHEY_SIMPLEX,
            cv2.FONT_HERSHEY_PLAIN,
            cv2.FONT_HERSHEY_DUPLEX,
            cv2.FONT_HERSHEY_COMPLEX,
            cv2.FONT_HERSHEY_TRIPLEX,
            cv2.FONT_HERSHEY_COMPLEX_SMALL,
            cv2.FONT_HERSHEY_SCRIPT_SIMPLEX,
            cv2.FONT_HERSHEY_SCRIPT_COMPLEX,
            cv2.FONT_ITALIC]

fontScale = 1  # 字体缩放比例
color = (255, 255, 255)  # 字体颜色白色

# 3.遍历字体列表
for i in range(len(fontList)):
    pos = (10, 50 * (i + 1))  # 显示位置
    img_Text = cv2.putText(img, text, pos, fontList[i], fontScale, color)

# 4.显示图像
cv2.imshow("Text Example", img_Text)
cv2.waitKey(0)
cv2.destroyAllWindows()

2.如果要添加中文文字,在cv2里面显示。可以结合pillow模块种书写文字draw.text及字体函数的相关用法,然后将pil的rgb格式转换cv2中的bgr颜色格式。

python 复制代码
# -*- coding: utf-8 -*-
# @Author : 小红牛
# 微信公众号:WdPython
import cv2
import numpy as np
from PIL import Image, ImageDraw, ImageFont

# 1.加载原始图像
original_image = cv2.imread('example.png')
# 2.设置中文字体路径(确保路径正确)
font_path = 'simkai.ttf'  # 替换为你的中文字体路径
font_size = 30
font_color = (255, 255, 0)  # 黄色
text = '我的Python教程@小红牛'

# 3.使用Pillow创建文本图像
img_pil = Image.fromarray(cv2.cvtColor(original_image, cv2.COLOR_BGR2RGB))
print('1.原图的宽高:', img_pil.width, img_pil.height)
draw = ImageDraw.Draw(img_pil)
font = ImageFont.truetype(font_path, font_size)

bbox = draw.textbbox((0, 0), text, font=font)
text_width = bbox[2] - bbox[0]
text_height = bbox[3] - bbox[1]
print('2.水印文字的大小:', text_width, text_height)

# 4.计算水印,显示的位置,这里假设放在右下角
# 获取原始图像的宽高
original_width, original_height = img_pil.size
text_position = (original_width - text_width-50, original_height - text_height-50)
print('3.计算水印显示的位置:', text_position)
# 5.在Pillow图像上绘制文本
draw.text(text_position, text, font=font, fill=font_color)
# 6.将Pillow图像转换回OpenCV图像
text_image = cv2.cvtColor(np.array(img_pil), cv2.COLOR_RGB2BGR)
cv2.imshow('Image with text', text_image)
cv2.imwrite('result.png', text_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

完毕!!感谢您的收看

----------★★历史博文集合★★----------

我的零基础Python教程,Python入门篇 进阶篇 视频教程 Py安装py项目 Python模块 Python爬虫 Json Xpath 正则表达式 Selenium Etree CssGui程序开发 Tkinter Pyqt5 列表元组字典数据可视化 matplotlib 词云图 Pyecharts 海龟画图 Pandas Bug处理 电脑小知识office自动化办公 编程工具 NumPy Pygame

相关推荐
tangjunjun-owen8 分钟前
windows系统visual studio编译器配置opencv库
ide·人工智能·windows·opencv·visual studio
.Vaidurya.12 分钟前
基于2023年网络赛赛题了解OpenCv
人工智能·opencv·计算机视觉
闲人编程13 分钟前
Python 实现 LM 算法(Levenberg-Marquardt)
开发语言·python·算法·优化·梯度下降·拟合·lm
神奇夜光杯23 分钟前
Python酷库之旅-第三方库Pandas(117)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长
stonewu38 分钟前
OpenCV 深度学习模块(DNN)识别手势
深度学习·opencv·dnn
吉小雨1 小时前
Playwright 自动化验证码教程
运维·数据库·python·自动化
TuringSnowy1 小时前
Pandas_sqlite
python·pandas
可愛小吉1 小时前
Python 课程11-Web 开发
开发语言·python·django·flask
johnny_zi1 小时前
08 - RTC实验
python·单片机·嵌入式硬件
u0103731061 小时前
Django创建模型
后端·python·django