放大图像中的文本后如何保留背景

How can I retain background after dilating text in image

import cv2
import numpy as np

# Load image, grayscale, Gaussian blur, Otsu's threshold
image = cv2.imread('1.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray, (7,7), 0)
thresh = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]

# Create rectangular structuring element and dilate
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5,5))
dilate = cv2.dilate(thresh, kernel, iterations=4)


cv2.imshow('dilate', dilate)

cv2.waitKey()

我正在尝试屏蔽图像中的文本元素和 return 仅包含剩余部分的图像。我应用了阈值化和扩张,但如何保留背景。

阈值化和扩张后的图像

原图:

这是一个简单的方法:

使用反转扩张图像cv2.bitwise_not(dilate),在原始图像上创建一个蒙版。

res = cv2.bitwise_and(image, image, mask=cv2.bitwise_not(dilate))

在上图中,所有文本区域及其边界都被屏蔽了。

现在用原始图像的背景替换那些被屏蔽掉的区域。为此,我首先记下 mask_ind 中文本重新出现的坐标。然后将那些区域的像素值替换成原图的背景image[0,0]

mask_ind = (dilate == 255)
res[mask_ind] = image[0,0]
cv2.imshow(res)