如何使用Python增加图片内文字描边粗细或将文字加粗
Python调整图片内文字样式的可行方案
以下是两种实现图片文字加粗、增加描边需求的成熟方案:
方案1:OCR识别后重绘文字(效果最优)
该方案通过识别图片中的文字位置、内容,擦除原有文字后重新绘制带自定义样式的文字,可自由调整加粗程度、描边粗细、颜色等参数,最终效果最自然。
依赖安装
pip install pillow opencv-python pytesseract
注:使用pytesseract需要提前在本地安装Tesseract OCR引擎,Windows/macOS/Linux都可直接下载对应安装包
实现代码
import cv2 import pytesseract from PIL import Image, ImageDraw, ImageFont import numpy as np # 读取图片 img = cv2.imread("your_image.jpg") rgb_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 识别文字位置和内容 ocr_data = pytesseract.image_to_data(rgb_img, output_type=pytesseract.Output.DICT) n_boxes = len(ocr_data['text']) # 转为PIL格式方便绘图 pil_img = Image.fromarray(rgb_img) draw = ImageDraw.Draw(pil_img) # 遍历所有识别到的文字 for i in range(n_boxes): if int(ocr_data['conf'][i]) > 60: # 只处理置信度高于60的文字 (x, y, w, h) = (ocr_data['left'][i], ocr_data['top'][i], ocr_data['width'][i], ocr_data['height'][i]) text = ocr_data['text'][i] # 用背景色填充原有文字区域 bg_color = rgb_img[y-2:y+h+2, x-2:x+w+2].mean(axis=0).mean(axis=0).astype(int) draw.rectangle([(x, y), (x+w, y+h)], fill=tuple(bg_color)) # 绘制加粗带描边的新文字,可自行调整font、stroke_width、字体大小参数 font = ImageFont.truetype("arial.ttf", h) # 可替换为你需要的字体文件路径 # 先画描边,再画文字 draw.text((x, y), text, font=font, fill=(0,0,0), stroke_width=2, stroke_fill=(255,255,255)) # 仅加粗不加描边的话直接设置stroke_width=0,调整文字颜色即可 # 保存结果 result_img = cv2.cvtColor(np.array(pil_img), cv2.COLOR_RGB2BGR) cv2.imwrite("result.jpg", result_img)
方案2:直接图像形态学处理(轻量快速)
如果不需要精确匹配原有字体,只是需要让现有文字快速变粗、增强描边效果,可以直接用OpenCV的形态学膨胀操作处理,不需要安装OCR引擎,处理速度极快。
依赖安装
pip install opencv-python numpy
实现代码
import cv2 import numpy as np # 读取图片 img = cv2.imread("your_image.jpg") # 转为灰度图 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 二值化分离文字和背景 _, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU) # 定义膨胀核,核越大文字加粗/描边效果越明显 kernel = np.ones((2,2), np.uint8) # 执行膨胀操作 dilated = cv2.dilate(thresh, kernel, iterations=1) # 合并回原图 result = img.copy() result[dilated==255] = (0,0,0) # 可调整为你需要的文字/描边颜色 # 保存结果 cv2.imwrite("result_fast.jpg", result)
方案选择建议:
- 对效果要求高、需要自定义多种文字样式的场景选方案1
- 简单快速批量处理、背景简单的场景选方案2
内容的提问来源于stack exchange,提问作者Saqueeb
相关产品推荐
相关产品推荐

