基于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
相关产品推荐
相关产品推荐

