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

如何从已对齐的表单图像中去除模板,仅保留手写内容?

去除表单模板保留手写内容的优化方案

你已拥有两张完美对齐的图像:已填写手写内容的表单和空白表单模板,目标是去除底层模板仅保留手写内容。当前使用阈值+修复的方法仍残留模板痕迹,以下是几种更有效的技术方案:

方案1:图像差分法(简单高效)

利用对齐后的图像差异直接定位手写区域,核心是计算两张灰度图的像素差值:

import cv2
import numpy as np

# 读取图像并转为灰度
filled = cv2.imread('image0.png', cv2.IMREAD_GRAYSCALE)
template = cv2.imread('image1.png', cv2.IMREAD_GRAYSCALE)

# 先做直方图均衡化,消除亮度差异影响
filled_eq = cv2.equalizeHist(filled)
template_eq = cv2.equalizeHist(template)

# 计算差分图
diff = cv2.absdiff(filled_eq, template_eq)

# 阈值提取手写区域(根据实际图像调整阈值)
_, handwritten = cv2.threshold(diff, 25, 255, cv2.THRESH_BINARY)

# 形态学操作优化:去除噪点、填补手写缝隙
kernel = np.ones((2, 2), np.uint8)
handwritten = cv2.morphologyEx(handwritten, cv2.MORPH_CLOSE, kernel)

cv2.imwrite('result_diff.png', handwritten)

方案2:精准掩码擦除法(改进原有思路)

优化模板掩码的生成逻辑,只针对模板线条区域进行擦除,避免误损手写内容:

import cv2
import numpy as np

filled = cv2.imread('image0.png', cv2.IMREAD_GRAYSCALE)
template = cv2.imread('image1.png', cv2.IMREAD_GRAYSCALE)

# 提取模板的边缘线条(Canny边缘检测)
template_edges = cv2.Canny(template, 40, 120)
# 膨胀线条,确保完全覆盖模板痕迹
kernel = np.ones((2, 2), np.uint8)
template_edges = cv2.dilate(template_edges, kernel, iterations=1)

# 生成掩码:模板线条区域为0,其余区域为255
mask = cv2.bitwise_not(template_edges)

# 对填写图做二值化,提取手写
_, filled_bw = cv2.threshold(filled, 110, 255, cv2.THRESH_BINARY_INV)
# 用掩码去除模板线条
handwritten = cv2.bitwise_and(filled_bw, filled_bw, mask=mask)
# 反转回白底黑字
handwritten = cv2.bitwise_not(handwritten)

cv2.imwrite('result_mask.png', handwritten)

方案3:背景减除器法(适合高对比度场景)

将空白模板作为背景,用背景减除算法提取前景手写内容:

import cv2

filled = cv2.imread('image0.png', cv2.IMREAD_GRAYSCALE)
template = cv2.imread('image1.png', cv2.IMREAD_GRAYSCALE)

# 创建MOG2背景减除器,关闭阴影检测
fgbg = cv2.createBackgroundSubtractorMOG2(history=1, varThreshold=20, detectShadows=False)

# 先传入模板初始化背景
_ = fgbg.apply(template)

# 传入填写图提取手写前景
handwritten = fgbg.apply(filled)

# 形态学去噪
kernel = np.ones((1, 1), np.uint8)
handwritten = cv2.morphologyEx(handwritten, cv2.MORPH_OPEN, kernel)

cv2.imwrite('result_bg_sub.png', handwritten)

方案4:深度学习修复法(进阶方案)

如果传统方法效果仍不理想,可以尝试基于深度学习的图像修复模型,比如LaMa:

  1. 将模板线条生成精准mask(可通过边缘检测+膨胀实现)
  2. 将填写图和mask输入LaMa模型,模型会自动去除模板并修复背景,保留手写内容

这类方法对复杂模板、模糊手写的适配性更强,可通过开源实现快速部署。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 13:35:19