Python OpenCV结合PIL实现图片中文输出

Miles
Miles
发布时间:2026-10-13| 2人浏览过
原创

本文介绍如何在Python中使用OpenCV在图片上输出中文。由于OpenCV原生支持有限,推荐结合PIL模块进行格式转换。通过OpenCV读取图像并转为PIL格式,利用ImageFont和ImageDraw绘制中文后,再转回OpenCV格式显示或保存。该方法避免了编译FreeType库的繁琐过程,代码示例清晰展示了字体设置、颜色定义及编码转换的关键步骤。

在OpenCV中直接于图片上渲染中文通常较为困难,常规做法是依赖FreeType库。FreeType是一款免费开源且高质量的字体引擎,支持多种字体格式并提供统一访问接口。然而,集成FreeType需要下载源码并重新编译库文件,这一过程相对繁琐且耗时。

在Python环境下,更简便的方案是利用PIL(Python Imaging Library)模块。该方法的核心在于实现OpenCV图像数据与PIL图像对象之间的相互转换,从而利用PIL强大的文本绘制功能来间接实现OpenCV中的中文输出。

# -*- coding: utf-8 -*- 
import cv2 
import numpy 
from PIL import Image, ImageDraw, ImageFont 
 
if __name__ == '__main__': 
 
 img_OpenCV = cv2.imread('01.jpg') 
 # 图像从OpenCV格式转换成PIL格式 
 img_PIL = Image.fromarray(cv2.cvtColor(img_OpenCV, cv2.COLOR_BGR2RGB)) 
 
 # 字体 字体*.ttc的存放路径一般是: /usr/share/fonts/opentype/noto/ 查找指令locate *.ttc 
 font = ImageFont.truetype('NotoSansCJK-Black.ttc', 40) 
 # 字体颜色 
 fillColor = (255,0,0) 
 # 文字输出位置 
 position = (100,100) 
 # 输出内容 
 str = '在图片上输出中文' 
 
 # 需要先把输出的中文字符转换成Unicode编码形式 
 if not isinstance(str, unicode): 
  str = str.decode('utf8') 
 
 draw = ImageDraw.Draw(img_PIL) 
 draw.text(position, str, font=font, fill=fillColor) 
 # 使用PIL中的save方法保存图片到本地 
 # img_PIL.save('02.jpg', 'jpeg') 
 
 # 转换回OpenCV格式 
 img_OpenCV = cv2.cvtColor(numpy.asarray(img_PIL),cv2.COLOR_RGB2BGR) 
 cv2.imshow("print chinese to image",img_OpenCV) 
 cv2.waitKey() 
 cv2.imwrite('03.jpg',img_OpenCV) 

最终输出的图像效果如下图所示:

 

系统中字体文件(如.ttc格式)的常见存放路径为:/usr/share/fonts/opentype/noto/

可通过locate命令快速检索本机已安装的字体文件:


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。