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

基于OpenCV的表单签名存在性检测方案咨询

如何自动化检测图片中是否存在签名(无需匹配)

我有一张带签名的表单图片,需要一种自动化方法判断图中是否存在签名——不需要做签名匹配,只返回“存在签名”或“无签名”的布尔结果。目前找到的资料要么是签名匹配方案(不符合需求,因为每次签名都不一样),要么就是无法生效。

我的基础流程是:加载表单图片,裁剪后转灰度图并二值化,再通过像素坐标裁剪到表单的特定签名区域。以下是两个裁剪示例:

  • 含签名的裁剪区域(signature_1a):存在深色手写签名
  • 无签名的裁剪区域(signature_2b):仅空白背景,无手写痕迹

已尝试的无效方法

1. Tesseract文本识别

使用pytesseract.image_to_string()提取文本,尝试通过判断输出是否为空或非空来区分,但无法有效识别两张图片的差异。

2. 统计非白色像素

原本假设无签名的图片非白色像素数量为0,但实际测试结果不符:

signature_2b = cropped_images['Section 2']['2b']
img = cv2.cvtColor(signature_2b, cv2.COLOR_BGR2GRAY)
n_non_white_pix = np.sum(img > 0)
print('非白色像素数量:', n_non_white_pix) # 预期结果为0

输出: 非白色像素数量: 225663

3. OpenCV Blob检测

使用OpenCV的SimpleBlobDetector进行Blob检测,但未检测到任何Blob:

# 读取图片
im = cv2.imread("sig_sample.png", cv2.IMREAD_GRAYSCALE)
 
# 使用默认参数初始化检测器
detector = cv2.SimpleBlobDetector_create()
 
# 检测Blob
keypoints = detector.detect(im)
 
# 绘制检测到的Blob为红色圆圈
# cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS 确保圆圈大小与Blob对应
im_with_keypoints = cv2.drawKeypoints(im, keypoints, np.array([]), (0,0,255), cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
 
# 显示结果
cv2.imshow("Keypoints", im_with_keypoints)
cv2.waitKey(0)

请问我该如何实现仅检测图片中是否存在签名?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 17:01:02