Opencv中的cv2.putText中文乱码 python
时间: 2025-01-19 16:54:18 浏览: 164
### 解决 Python OpenCV `cv2.putText` 函数显示中文乱码的方法
当使用 OpenCV 的 `cv2.putText()` 方法尝试绘制中文字符时,可能会遇到乱码问题。这是因为默认情况下,OpenCV 并不支持 UTF-8 编码的字符串以及复杂的字体渲染。
一种有效的解决方案是利用 Pillow 库来处理文字绘制部分,再将其转换回 OpenCV 图像格式。具体实现如下:
#### 使用 Pillow 和 NumPy 处理中文文本
通过引入 Pillow 来创建带有指定中文字体的文字图片,并最终转成适合 OpenCV 显示的形式[^1]。
```python
from PIL import Image, ImageDraw, ImageFont
import numpy as np
import cv2
def put_chinese_text(image_path, text, position=(50, 50)):
# 加载原始图像并准备画布
img_bgr = cv2.imread(image_path)
# 将 BGR 色彩模式转化为 RGB 方便后续操作
img_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)
# 构建PIL.Image对象用于绘图
pil_image = Image.fromarray(img_rgb)
draw = ImageDraw.Draw(pil_image)
# 设置字体样式与大小
font_style = ImageFont.truetype("simhei.ttf", 40, encoding="utf-8")
# 在图像上写入汉字
draw.text(position, text, fill=(255, 0, 0), font=font_style)
# 把修改过的图像重新转化回numpy数组形式供opencv读取
final_img_np_array = np.array(pil_image)
# 返回至BGR色彩空间以便于保存或展示
result_img = cv2.cvtColor(final_img_np_array, cv2.COLOR_RGB2BGR)
return result_img
if __name__ == "__main__":
output = put_chinese_text('example.jpg', '你好世界')
cv2.imshow('Result with Chinese Text', output)
cv2.waitKey(0)
```
此方法绕过了 OpenCV 对复杂字体的支持不足的问题,借助第三方库实现了高质量的中文文本渲染效果。
阅读全文
相关推荐
















