如何用Python提取图片中的删除线文本并转为列表格式
提取图片中带删除线文本的解决方案
需求说明
需要识别并提取图片中带有删除线的文本,仅保留这类内容并将每个实例存入列表,例如期望输出:['从前', '杰克', '村庄']
现有问题
使用常规的pytesseract做OCR只能提取图片中的所有文本,但无法识别并标记出带删除线的内容,无法区分目标文本和普通文本。
解决方案
方法一:OpenCV预处理+Tesseract OCR
先通过图像处理识别出带删除线的文本区域,再对这些区域单独做OCR提取内容:
- 图像预处理:将图像转为灰度图,通过形态学操作检测图像中的水平线(删除线),定位到包含删除线的文本区域。
- 区域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
相关产品推荐
相关产品推荐

