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

使用Python从扫描版PDF页面提取图片遇问题求助

问题原因

扫描版PDF本质上是纸质文档扫描后生成的图像集合,每页PDF对应的就是一张完整的扫描图像,而非包含独立子图片的结构化文档。所以你用page.get_images()提取到的自然就是整页的图像,这是正常现象。

解决方案:从整页扫描图中提取子图片

如果要从整页扫描图里抠出其中的子图片,需要通过图像识别技术检测图片区域,这里用OpenCV实现轮廓检测和区域提取:

首先安装依赖:

pip install fitz pillow opencv-python numpy

代码示例:

import fitz
import cv2
import numpy as np
from PIL import Image
import io
import os

def extract_subimages_from_scanned_pdf(pdf_path, output_dir):
    os.makedirs(output_dir, exist_ok=True)
    
    pdf_file = fitz.open(pdf_path)
    for page_idx in range(len(pdf_file)):
        page = pdf_file[page_idx]
        # 提取整页扫描图
        pix = page.get_pixmap()
        img_bytes = pix.tobytes("png")
        img = Image.open(io.BytesIO(img_bytes))
        # 转为OpenCV格式
        cv_img = cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR)
        
        # 预处理:灰度化、二值化
        gray = cv2.cvtColor(cv_img, cv2.COLOR_BGR2GRAY)
        _, thresh = cv2.threshold(gray, 240, 255, cv2.THRESH_BINARY_INV)
        
        # 检测轮廓
        contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
        
        subimg_count = 0
        for cnt in contours:
            # 过滤太小的轮廓(避免噪声)
            area = cv2.contourArea(cnt)
            if area < 5000:
                continue
            # 获取轮廓的外接矩形
            x, y, w, h = cv2.boundingRect(cnt)
            # 提取子图片
            sub_img = cv_img[y:y+h, x:x+w]
            # 保存子图片
            output_path = f"{output_dir}/page_{page_idx}_subimg_{subimg_count}.png"
            cv2.imwrite(output_path, sub_img)
            subimg_count += 1
        
        print(f"页面{page_idx}提取完成,共得到{subimg_count}张子图片")

# 使用示例
extract_subimages_from_scanned_pdf("你的扫描版PDF路径.pdf", "提取结果目录")
注意事项
  • 代码通过二值化和轮廓检测识别页面中的深色区域(通常图片的边框或内容会和背景形成对比),过滤小噪声后提取外接矩形区域作为子图片。
  • 如果你的扫描图背景或图片样式特殊,可以调整threshold的阈值(当前为240)或轮廓面积过滤值(当前为5000)来优化提取效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 21:45:36