You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python结合OpenCV或Pillow为图片添加不同角度的文字?

如何为图片添加不同角度的文字(以120°的"Hello World"为例)

下面分别用Pillow和OpenCV两种常用工具实现需求:

一、使用Pillow实现

Pillow可以通过生成旋转后的文字图像,再将其粘贴到原图的方式实现角度文字添加:

from PIL import Image, ImageDraw, ImageFont

# 1. 加载原图
img = Image.open("input.jpg")
draw = ImageDraw.Draw(img)

# 2. 设置字体(请替换为你的字体文件路径,比如系统字体路径)
font = ImageFont.truetype("arial.ttf", 40)  # 字体大小40

# 3. 定义要添加的文字和旋转角度
text = "Hello World"
rotate_angle = 120

# 4. 创建单独的文字图像,用于旋转
text_img = Image.new("RGBA", draw.textbbox((0,0), text, font=font)[2:], (255,255,255,0))
text_draw = ImageDraw.Draw(text_img)
text_draw.text((0,0), text, font=font, fill=(255,0,0,255))  # 红色文字

# 5. 旋转文字图像(expand=True确保图像完整容纳旋转后的内容)
rotated_text = text_img.rotate(rotate_angle, expand=True)

# 6. 将旋转后的文字粘贴到原图(这里选择左上角偏移(50,50)的位置,可自行调整)
img.paste(rotated_text, (50,50), rotated_text)

# 7. 保存结果
img.save("output_pillow.jpg")

二、使用OpenCV实现

OpenCV没有直接旋转文字的API,需要先在空白画布上绘制文字,再旋转画布,最后叠加到原图:

import cv2
import numpy as np

# 1. 加载原图
img = cv2.imread("input.jpg")
img_height, img_width = img.shape[:2]

# 2. 设置文字参数
text = "Hello World"
font = cv2.FONT_HERSHEY_SIMPLEX
font_scale = 1.5
font_color = (0,0,255)  # BGR格式,红色
thickness = 2
rotate_angle = 120

# 3. 计算文字尺寸,创建对应大小的空白画布
(text_width, text_height), _ = cv2.getTextSize(text, font, font_scale, thickness)
text_canvas = np.zeros((text_height + 20, text_width + 20, 3), dtype=np.uint8)  # 预留边缘

# 4. 在空白画布上绘制文字
cv2.putText(text_canvas, text, (10, text_height + 5), font, font_scale, font_color, thickness)

# 5. 获取旋转矩阵,旋转文字画布
center = (text_canvas.shape[1]//2, text_canvas.shape[0]//2)
rotation_matrix = cv2.getRotationMatrix2D(center, rotate_angle, 1.0)
rotated_text = cv2.warpAffine(text_canvas, rotation_matrix, (text_canvas.shape[1], text_canvas.shape[0]))

# 6. 将旋转后的文字画布叠加到原图(这里选择坐标(50,50)作为左上角)
x, y = 50, 50
roi = img[y:y+rotated_text.shape[0], x:x+rotated_text.shape[1]]
# 处理透明区域(这里通过阈值提取文字掩码)
gray = cv2.cvtColor(rotated_text, cv2.COLOR_BGR2GRAY)
_, mask = cv2.threshold(gray, 1, 255, cv2.THRESH_BINARY_INV)
roi = cv2.bitwise_and(roi, roi, mask=mask)
roi = cv2.add(roi, rotated_text)
img[y:y+rotated_text.shape[0], x:x+rotated_text.shape[1]] = roi

# 7. 保存结果
cv2.imwrite("output_opencv.jpg", img)

内容的提问来源于stack exchange,提问作者Naveen raj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 03:36:30