Почему метод inpaint не удаляет текст из изображения I C? - PullRequest
1 голос
/ 03 марта 2020

Я пытаюсь замаскировать маркировку на I C, но метод inpaint от OpenCV работает неправильно.

inpainting dies

Левое изображение является исходным изображением (после обрезки области интереса). Среднее изображение - это маска, сгенерированная мною. Правое изображение - результат метода рисования.

Вот что я сделал:

mask = cv2.threshold(img, 120, 255, cv2.THRESH_BINARY)[1]
dst = cv2.inpaint(img, mask, 3, cv2.INPAINT_NS)

Я поиграл с третьим параметром метода рисования, но ничего хорошего не получилось.

Я видел здесь вопрос, где кто-то использовал точно такой же подход, и у него также было темное изображение, где контрасты не столь различимы. Я также попробовал оба inpainting алгоритмы, Telea и NS.

В чем здесь проблема?

1 Ответ

2 голосов
/ 03 марта 2020

В основном, расширяйте mask, используемый для рисования. Кроме того, увеличение радиуса inpaint даст немного лучшие результаты.

Это было бы моим предложением:

import cv2
from matplotlib import pyplot as plt

# Read image
img = cv2.imread('ic.png', cv2.IMREAD_GRAYSCALE)

# Binary threshold image
mask = cv2.threshold(img, 120, 255, cv2.THRESH_BINARY)[1]

# Remove small noise
inp_mask = cv2.morphologyEx(mask,
                            cv2.MORPH_OPEN,
                            cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5)))

# Dilate mask
inp_mask = cv2.dilate(inp_mask,
                      cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (15, 15)))

# Inpaint
dst = cv2.inpaint(img, inp_mask, 15, cv2.INPAINT_NS)

# Show results
plt.figure(1, figsize=(10, 10))
plt.subplot(2, 2, 1), plt.imshow(img, cmap='gray'), plt.title('Original image')
plt.subplot(2, 2, 2), plt.imshow(mask, cmap='gray'), plt.title('Thresholded image')
plt.subplot(2, 2, 3), plt.imshow(inp_mask, cmap='gray'), plt.title('Inpaint mask')
plt.subplot(2, 2, 4), plt.imshow(dst, cmap='gray'), plt.title('Inpainted image')
plt.tight_layout()
plt.show()

И это было бы выходные данные:

Outputs

Надеюсь, это поможет!

----------------------------------------
System information
----------------------------------------
Platform:    Windows-10-10.0.16299-SP0
Python:      3.8.1
Matplotlib:  3.2.0rc3
OpenCV:      4.2.0
----------------------------------------
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...