如何用Python从图片/PDF中提取位置不固定的矩形印章?
印章自动化提取进阶方案
一、优化轮廓筛选逻辑
- 先抓印章的核心特征过滤无效轮廓:印章基本都是圆形/椭圆形,用
cv2.approxPolyDP计算轮廓的近似多边形,或者直接算圆度(公式:4π*面积/周长²),把圆度高于0.7的轮廓留着;另外印章大多是红/蓝色,先转HSV颜色空间提取对应颜色的掩码,再结合轮廓检测,能直接筛掉一大片无关轮廓。 - 加个尺寸过滤:根据你实际处理的文档,定个印章的面积范围,太小的噪点、太大的页面边框直接排除。
二、结合文本与布局缩小搜索范围
- 印章一般都在落款、日期附近,用Tesseract这类OCR工具提取文档里的文本,找到“盖章”“日期”“单位名称”这些关键词的位置,就在这些区域附近找轮廓,能省不少算力。
- 处理PDF的话,用pdfplumber或者PyPDF2先提取页面布局,区分文本块和图像块,优先在图像块里找印章,不用全页扫描。
三、用机器学习补漏
- 如果轮廓筛选后还是有误检,不妨训练个简单的分类模型:收集一批标注好的印章和非印章图,用TensorFlow或者PyTorch搭个轻量CNN,输入裁剪后的轮廓区域,直接判断是不是印章。
- 嫌训练麻烦的话,拿YOLO这类预训练目标检测模型微调,标注一批数据就能直接检测印章位置,批量处理的时候效率很高。
四、PDF的特殊处理技巧
- 要是遇到矢量PDF里的印章(不是图像),用pdfminer提取矢量路径,看路径是不是圆形/椭圆形,颜色是不是红/蓝,再提取对应区域。
- 扫描版PDF直接用
pdf2image转成图片,按图片的流程处理就行。
五、迭代优化测试
- 攒一批不同场景的测试样本(不同位置、不同样式的印章),每次调整参数后测准确率,比如调颜色阈值、圆度阈值这些。
- 遇到误检的情况,分析是啥干扰(比如圆形logo、表格边框),针对性加规则过滤。
内容的提问来源于stack exchange,提问作者Bhakti
相关产品推荐
相关产品推荐

