cv2.putText()如何传入中文字体
时间: 2023-10-19 18:18:36 浏览: 151
由于 OpenCV 的 cv2.putText() 函数只支持 ASCII 字符,因此在传入中文字体时需要进行额外的处理。
一种解决方法是使用 PIL 库中的 ImageFont 和 ImageDraw 模块来绘制中文字体。具体步骤如下:
1. 安装 PIL 库:`pip install Pillow`
2. 导入 PIL 库中的 ImageFont 和 ImageDraw 模块:`from PIL import ImageFont, ImageDraw`
3. 加载中文字体文件:`font = ImageFont.truetype('path/to/font.ttf', size=font_size)`
4. 创建一个空白图像:`img = Image.new('RGB', (width, height), color=(255, 255, 255))`
5. 获取 ImageDraw 对象:`draw = ImageDraw.Draw(img)`
6. 使用 ImageDraw 对象的 text() 方法绘制中文文本:`draw.text((x, y), text, font=font, fill=(0, 0, 0))`
7. 将 PIL 图像转换为 OpenCV 图像:`cv_img = cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR)`
注意:在 Windows 系统下,需要使用 simsun.ttc 字体文件来支持中文字体。在 Linux 系统下,可以使用系统自带的中文字体文件。
以下是一个完整的示例代码:
```python
import cv2
import numpy as np
from PIL import ImageFont, ImageDraw
# 加载中文字体文件
font = ImageFont.truetype('simsun.ttc', size=40)
# 创建一个空白图像
width, height = 640, 480
img = Image.new('RGB', (width, height), color=(255, 255, 255))
# 获取 ImageDraw 对象
draw = ImageDraw.Draw(img)
# 绘制中文文本
text = '你好,世界!'
x, y = 100, 200
draw.text((x, y), text, font=font, fill=(0, 0, 0))
# 将 PIL 图像转换为 OpenCV 图像
cv_img = cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR)
# 显示图像
cv2.imshow('image', cv_img)
cv2.waitKey()
cv2.destroyAllWindows()
```
阅读全文