Python 如何从图像中删除文本戳记?

Python 如何从图像中删除文本戳记?,python,opencv,Python,Opencv,我有这样的照片: 它具有随机分布在整个图像文件中的文本戳。关于图像,需要记住的一些方面有: 邮票中的文字始终相同 没有透明度 文本字体为黑色,因此与原始文本相比存在一些显著差异 所以我的问题是, 我如何找到这张文本邮票?我猜,也许模板匹配和公差可以帮上忙 尽管即使我找到了文本的确切位置,我如何摆脱它?我可以试着找出随机的背景,做一些我提到的事情,如下所示 获取文本戳记轮廓的边界框 然后取轮廓外的所有像素 从上一步中删除轮廓并填充随机像素,然后添加一些模糊,应该可以达到我预期的效果 以下

我有这样的照片:

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

  • 邮票中的文字始终相同
  • 没有透明度
  • 文本字体为黑色,因此与原始文本相比存在一些显著差异
所以我的问题是,

  • 我如何找到这张文本邮票?我猜,也许模板匹配和公差可以帮上忙
  • 尽管即使我找到了文本的确切位置,我如何摆脱它?我可以试着找出随机的背景,做一些我提到的事情,如下所示

    • 获取文本戳记轮廓的边界框
    • 然后取轮廓外的所有像素
    • 从上一步中删除轮廓并填充随机像素,然后添加一些模糊,应该可以达到我预期的效果

  • 以下代码将从图像中删除戳记:

    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()
    

    以下代码将从图像中删除戳记:

    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()
    

    您可以尝试tesseract ocr查找“一些”,然后对其进行处理(模糊或其他),您可以尝试tesseract ocr查找“一些”,然后对其进行处理(模糊或其他)