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

相关推荐
paid槮4 小时前
机器视觉之图像处理篇
图像处理·opencv·计算机视觉
酷飞飞6 小时前
Python网络与多任务编程:TCP/UDP实战指南
网络·python·tcp/ip
数字化顾问7 小时前
Python:OpenCV 教程——从传统视觉到深度学习:YOLOv8 与 OpenCV DNN 模块协同实现工业缺陷检测
python
学生信的大叔8 小时前
【Python自动化】Ubuntu24.04配置Selenium并测试
python·selenium·自动化
诗句藏于尽头9 小时前
Django模型与数据库表映射的两种方式
数据库·python·django
智数研析社9 小时前
9120 部 TMDb 高分电影数据集 | 7 列全维度指标 (评分 / 热度 / 剧情)+API 权威源 | 电影趋势分析 / 推荐系统 / NLP 建模用
大数据·人工智能·python·深度学习·数据分析·数据集·数据清洗
扯淡的闲人9 小时前
多语言编码Agent解决方案(5)-IntelliJ插件实现
开发语言·python
moxiaoran575310 小时前
Flask学习笔记(一)
后端·python·flask
秋氘渔10 小时前
迭代器和生成器的区别与联系
python·迭代器·生成器·可迭代对象
Gu_shiwww10 小时前
数据结构8——双向链表
c语言·数据结构·python·链表·小白初步