Python图像修复产生的结果很差

2024-05-01 00:10:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个python脚本,从图像中删除水印。为了做到这一点,我决定使用cv2.inpaint方法。以下是我删除水印所遵循的步骤:

  1. 从用户处获取图像
  2. 要求用户在水印上着色
  3. 使用用户的着色创建遮罩
  4. 使用为删除水印而创建的遮罩修复图像

这是我的代码:

import cv2
import numpy as np

drawing = False # true if mouse is pressed
pt1_x , pt1_y = None , None

def nothing(x):
    pass

def line_drawing(event,x,y,flags,param):
    global pt1_x,pt1_y,drawing

    if event==cv2.EVENT_LBUTTONDOWN:
        drawing=True
        pt1_x,pt1_y=x,y

    elif event==cv2.EVENT_MOUSEMOVE:
        if drawing==True:
            cv2.line(img,(pt1_x,pt1_y),(x,y),color=(0,0,255),thickness= cv2.getTrackbarPos('Thickness','Damaged Image'))
            cv2.line(mask, (pt1_x, pt1_y), (x, y), color=(255,255,255), thickness=cv2.getTrackbarPos('Thickness', 'Damaged Image'))
            pt1_x,pt1_y=x,y
    elif event==cv2.EVENT_LBUTTONUP:
        drawing=False
        cv2.line(img,(pt1_x,pt1_y),(x,y),color=(0,0,255),thickness= cv2.getTrackbarPos('Thickness','Damaged Image'))
        cv2.line(mask, (pt1_x, pt1_y), (x, y), color=(255,255,255), thickness=cv2.getTrackbarPos('Thickness', 'Damaged Image'))

img = cv2.imread('D:\\Watermark.jpg')
ratio = img.shape[1]/img.shape[0]

height = 600
width = height * ratio

img = cv2.resize(img, (int(width),height))

mask = np.zeros(img.shape[:-1], dtype = np.uint8)
#mask = cv2.integral(mask)
cv2.namedWindow('Mask')

cv2.namedWindow('Damaged Image')
cv2.setMouseCallback('Damaged Image',line_drawing)

cv2.createTrackbar('Thickness','Damaged Image', 10, 50, nothing)

while(1):
    cv2.imshow('Damaged Image',img)
    cv2.imshow('Mask', mask)

    if cv2.waitKey(1) & 0xFF == 27:
        break

    elif cv2.waitKey(1) & 0xFF == ord('a'):
        pass

    elif cv2.waitKey(1) & 0xFF == ord('s'):
        restored = cv2.inpaint(img, mask, 3, cv2.INPAINT_TELEA)
        cv2.namedWindow('Restored Image')
        cv2.imshow('Restored Image', restored)

cv2.destroyAllWindows()

这是我试图从中删除水印的图像:

enter image description here

这是面具:

enter image description here

这是输出:

enter image description here

为什么产量如此之低?我能做些什么来提高输出的质量?任何帮助都将不胜感激。谢谢


Tags: 图像imageeventimgiflinemaskcv2