我有这样的图像
如您所见,图像中有一个笔标记。我要删除该标记。如何在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)
它无法按需工作。所有文本将被删除。如何解决这个问题?
最佳答案
您可以对图像的第一个数组取阈值。看起来像这样:
在这里可以清楚地看到墨水标记和字母的像素值的差异。阈值化后看起来像:
现在可以通过关闭来去除墨水标记。但是,它也会减小字母的大小。因此,先进行腐 eclipse 处理,然后进行按位“或”操作,以获得没有墨水痕迹的掩模。
但是,如果您希望字母看起来像原始图像,则可以将掩码存储在255s的numpy数组中,并与原始图像按位或执行。
我使用的完整代码是:
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()
关于image - 使用OpenCV去除纸张上的墨水痕迹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56219829/