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

相关推荐
过期动态11 分钟前
详解Python面向对象程序设计
开发语言·python·pycharm·django
兜里有糖请分享41 分钟前
Python中序列化/反序列化JSON格式的数据
爬虫·python
萧鼎1 小时前
Python中的TensorFlow与Keras:深度学习模型构建与训练
python·深度学习·tensorflow
决战春招1 小时前
人工智能之人脸识别(人脸采集人脸识别)
人工智能·opencv·学习·计算机视觉
阿乾之铭2 小时前
通过Django 与 PostgreSQL 进行WEB开发详细流程
python·postgresql·django
疯一样的码农2 小时前
Python 多线程
开发语言·python
chusheng18402 小时前
Python 爬取大量数据如何并发抓取与性能优化
开发语言·python·性能优化
计算机学姐2 小时前
基于Python的影院电影购票系统
开发语言·vue.js·后端·python·mysql·pycharm·pip
春天的菠菜3 小时前
【django】Django REST Framework (DRF) 项目中实现 JWT
后端·python·django·jwt
Learning改变世界3 小时前
Python快速安装软件包到环境的方案
开发语言·python