이미지 워터마크 삭제하기

J. Hwang·2024년 9월 18일
0

이미지 전처리 과정 중, 이미지에 찍혀있는 워터마크 혹은 저작권 표시를 없애면 모델 학습이 더 잘 되지 않을까 하는 생각이 들었다.

예시는 ImageNet 데이터 중의 하나이다. 개의 스케치 이미지인데 머리 부분에 copyright sign이 있다. opencv-python의 inpaint 기능을 이용하면 워터마크는 삭제하고 워터마크가 있던 부분을 복원할 수 있다.

import cv2
import numpy as np

# 원본 이미지 (워터 마크가 있는 개 이미지)
img = cv2.imread('dog.png', cv2.IMREAD_COLOR)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

# 워터 마크가 있는 부분에 직사각형 형태의 마스크를 만들어 워터마크를 제거하고 복원하기
mask = np.zeros(img.shape[:2], dtype=np.uint8)

# (x, y) = 시작 좌표, (w, h) = 너비와 높이 설정
x, y, w, h = 520, 80, 300, 300

# mask 영역을 255로 설정 (inpaint할 대상)
mask[y:y+h, x:x+w] = 255

# 이미지 복원
restored_img = cv2.inpaint(img, mask, inpaintRadius=10, flags=cv2.INPAINT_TELEA)

plt.imshow()로 결과물을 확인해보면 다소 부자연스럽기는 하지만 copyright sign이 없어진 이미지를 볼 수 있다.

보다 자연스럽게 복원하기 위해서 inpaintRadius, flags 등의 옵션을 잘 조절해보자.

다만 워터마크 부분에 해당하는 마스크 좌표를 직접 입력해야 한다는 점에서 자동화는 어려워 보인다. 자동으로 하기 위해서는 워터마크를 잘 detect할 수 있는 기능을 추가해야 한다.

** 반드시 모델 학습 목적으로만 이용하고, 저작권 침해가 될 수 있는 사용은 지양하자 **

profile
Let it code

0개의 댓글