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

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

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。

运行后的代码显示
在这里插入图片描述

# -*- 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颜色格式。
在这里插入图片描述

# -*- 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

相关推荐

  1. Pillow教程:翻转图像

    2024-07-18 02:52:03       44 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-18 02:52:03       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 02:52:03       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 02:52:03       57 阅读
  4. Python语言-面向对象

    2024-07-18 02:52:03       68 阅读

热门阅读

  1. Chapter 2: An Introduction to ASP.NET Core in Layman‘s Terms

    2024-07-18 02:52:03       18 阅读
  2. function calling实现调用理杏仁api获取数据

    2024-07-18 02:52:03       22 阅读
  3. 算法热门工程师面试题(一)

    2024-07-18 02:52:03       24 阅读
  4. RocketMQ集群中的broker挂了会怎样?

    2024-07-18 02:52:03       16 阅读
  5. Web前端三剑客入门学习网站推荐与编译软件

    2024-07-18 02:52:03       23 阅读
  6. Eureka介绍与使用

    2024-07-18 02:52:03       23 阅读
  7. 科研绘图系列:R语言雷达图(radar plot)

    2024-07-18 02:52:03       20 阅读
  8. 面试中如果被问到项目遇到的难题如何解决

    2024-07-18 02:52:03       20 阅读
  9. Jetpack Compose实现一个简单的微信UI

    2024-07-18 02:52:03       19 阅读
  10. 孟德尔随机化——混杂SNP剔除之LDlink(1)

    2024-07-18 02:52:03       24 阅读