我有一个这样的图像,

如您所见,图像中有一个笔迹。我想去掉那个印记。如何在OpenCV中实现?
我尝试将其转换为HSV,创建一个蓝色范围的蒙版,并使用代码删除它。
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
lower_blue = np.array([110,50,50])
upper_blue = np.array([130,255,255])
mask = cv2.inRange(hsv, lower_blue , upper_blue )
res = cv2.bitwise_and(img, img, mask= mask) 它不能像需要的那样工作。所有文本都将被删除。如何解决这个问题?
发布于 2019-05-21 00:15:55
你可以取第一个图像数组的阈值。它看起来是这样的:

在这里,可以清楚地看到墨水标记和字母的像素值的差异。阈值之后,它看起来是这样的:

现在可以通过关闭来删除墨迹。然而,它也会减小字母的大小。因此,在逐位OR之后执行侵蚀,以获得没有墨迹标记的掩码。

但是,如果您希望字母看起来像原始图像,您可以将掩码存储在255s的数值数组中,并对原始图像执行逐位“或”运算。

我使用的完整代码是:
img = cv2.imread('ink_mark.png')
wimg = img[:, :, 0]
ret,thresh = cv2.threshold(wimg,100,255,cv2.THRESH_BINARY)
kernel = np.ones((7, 7), np.uint8)
closing = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)
erosion = cv2.erode(closing, kernel, iterations = 1)
mask = cv2.bitwise_or(erosion, thresh)
white = np.ones(img.shape,np.uint8)*255
white[:, :, 0] = mask
white[:, :, 1] = mask
white[:, :, 2] = mask
result = cv2.bitwise_or(img, white)
cv2.imshow('image', result)
cv2.waitKey(0)
cv2.destroyAllWindows()https://stackoverflow.com/questions/56219829
复制相似问题