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

如何用Python提取图片中的删除线文本并转为列表格式

提取图片中带删除线文本的解决方案

需求说明

需要识别并提取图片中带有删除线的文本,仅保留这类内容并将每个实例存入列表,例如期望输出:['从前', '杰克', '村庄']

现有问题

使用常规的pytesseract做OCR只能提取图片中的所有文本,但无法识别并标记出带删除线的内容,无法区分目标文本和普通文本。

解决方案

方法一:OpenCV预处理+Tesseract OCR

先通过图像处理识别出带删除线的文本区域,再对这些区域单独做OCR提取内容:

  1. 图像预处理:将图像转为灰度图,通过形态学操作检测图像中的水平线(删除线),定位到包含删除线的文本区域。
  2. 区域OCR:提取每个目标区域,单独用pytesseract识别文本,收集结果。

代码示例:

import cv2
import numpy as np
from PIL import Image
import pytesseract

# 读取图像
img_path = 'path/to/image.png'
img = cv2.imread(img_path)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 创建水平线检测的结构元素
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (20, 1))
# 检测水平线(删除线)
horizontal_lines = cv2.morphologyEx(gray, cv2.MORPH_OPEN, kernel, iterations=2)

# 找到轮廓
contours, _ = cv2.findContours(horizontal_lines, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

strikethrough_texts = []

for cnt in contours:
    x, y, w, h = cv2.boundingRect(cnt)
    # 扩展区域以包含整行文本(根据实际情况调整上下偏移)
    text_region = gray[y-10:y+h+10, x:x+w]
    # 转为PIL图像
    pil_img = Image.fromarray(text_region)
    # OCR识别
    text = pytesseract.image_to_string(pil_img).strip()
    if text:
        strikethrough_texts.append(text)

print(strikethrough_texts)

方法二:使用支持文本样式识别的OCR工具

比如Google Cloud Vision API,它可以识别文本的格式属性(包括删除线),返回的结果中会标记文本是否带有删除线,直接筛选对应内容即可。

使用该工具的核心逻辑:调用API获取图像文本分析结果,遍历每个文本块,检查是否有删除线标记,收集对应的文本内容。

效果说明

通过上述方法,能够准确识别并提取图片中带删除线的文本,最终输出符合预期的列表格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 18:05:07