Я очень новичок в opencv и глубоком изучении с использованием python.Я пытаюсь удалить водяной знак / логотип с изображения.Я могу найти местоположение водяного знака путем нахождения местоположения обрезанного изображения водяного знака в исходном изображении на изображении, которое является постоянным для всех изображений.Мне нужно удалить найденный водяной знак.
Вот исходное изображение: [! [Original_image.jpeg] [1]] [1] Исходное изображение2: [! [En enter code here
ter описание изображения здесь] [2]] [2] Исходное изображение3: [! [Введите описание изображения здесь] [3]] [3]
Обрезанное изображение водяного знака из исходного изображения: [! [Cropped_image.jpeg] [4]] [4]
Расположенный водяной знак на изображении: [! [Расположенный водяной знак] [5]] [5] Я пробовал различный код, использующий тензорный поток / глубокое обучение, ниже которого не обобщаются и приводят к различным ошибкам при их запуске.
Например, я попробовал автоматическое определение водяного знака (https://github.com/rohitrango/automatic-watermark-detection), но это не сработало. Функция crop_watermark () в этой библиотеке не работала для моего изображения. Она обрезала какую-то другую частьизображение, которое не является водяным знаком, было также много других проблем с кодом.
Similary Я попробовал много других библиотек глубокого обучения без удачи.
Я также думал попробовать cv2.inpaint(img,mask,3,cv2.INPAINT_TELEA)
, ноУ меня нет изображения маски. У меня есть только одно изображение с водяным знаком, как показано ниже.не может также использовать функцию inpaint()
.
В настоящее время пытаемся использовать простой код, чтобы узнать точное местоположение водяного знака на изображении (путем обрезки водяного знака вручную и поиска местоположения на исходном изображении).
import numpy as np
import cv2
img = cv2.imread('original_image.jpeg')
print(img.shape)
h,w,c = img.shape
logo = cv2.imread("cropped_image.jpeg")
print(logo.shape)
hl,wl,cl = logo.shape
x1 = int(w/2-wl/2)
y1 = int(h/2-hl)
x2 = int(w/2+wl/2)
y2 = int(h/2)
cv2.rectangle(img, (x1, y1), (x2, y2), (255,0,0), 2)
cv2.imwrite("my.png",img)
cv2.imshow("lalala", img)
Над кодом можно найти правильные координаты водяного знака.С этого момента я не знаю, как действовать, чтобы удалить водяной знак.Было бы здорово, если бы вы могли предоставить пример кода вместе с концепцией.
Спасибо за помощь.