如何从图像中删除文本图章?

时间:2018-10-27 15:50:26

标签: python opencv

我有这样的照片:

enter image description here

它具有随机分布在整个图像文件中的文本戳记。关于图片需要注意的一些方面;

  • 图章中的文本始终相同。
  • 没有透明度。
  • 文本字体为黑色,因此与原始文本相比有一些显着差异。

所以我的问题是

  1. 我如何找到此文字图章?我猜想,也许模板与容差匹配会有所帮助?
  2. 尽管我找到了文本的确切位置,但如何去除它呢?我可以尝试找出随机背景,并做如下所述的事情;

    • 获取文本图章轮廓的边界框。
    • 然后将所有像素移出轮廓之外。
    • 删除轮廓并在上一步中填充随机像素并添加一些模糊效果可以达到我期望的效果。

1 个答案:

答案 0 :(得分:2)

以下代码从您的图片中删除了图章:

inp_img = cv2.imread('stamp.jpg',cv2.IMREAD_GRAYSCALE)
th,inp_img_thresh = cv2.threshold(255-inp_img,220,255,cv2.THRESH_BINARY)
dilate = cv2.dilate(inp_img_thresh,np.ones((5,5),np.uint8))
canny = cv2.Canny(dilate,0,255)
_,contours,_ = 
cv2.findContours(canny,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
test_img = inp_img.copy()
for c in contours:
    (x, y, w, h) = cv2.boundingRect(c)
    #print(x,y,w,h,test_img[y+h//2,x-w])
    test_img[y+3:y-2+h,x+3:x+w] = 240 #test_img[y+h//2,x-w]

cv2.imwrite("stamp_removed.jpg",test_img)
cv2.imshow("input image",inp_img)
cv2.imshow("threshold",inp_img_thresh)
cv2.imshow("output image",test_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

Output Image With The Stamp Removed