image - 使用OpenCV去除纸张上的墨水痕迹

标签 image opencv image-processing

我有这样的图像

enter image description here

如您所见,图像中有一个笔标记。我要删除该标记。如何在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) 

它无法按需工作。所有文本将被删除。如何解决这个问题?

最佳答案

您可以对图像的第一个数组取阈值。看起来像这样:

first array

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

thresholded image

现在可以通过关闭来去除墨水标记。但是,它也会减小字母的大小。因此,先进行腐 eclipse 处理,然后进行按位“或”操作,以获得没有墨水痕迹的掩模。

mask

但是,如果您希望字母看起来像原始图像,则可以将掩码存储在255s的numpy数组中,并与原始图像按位或执行。

result

我使用的完整代码是:

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/

相关文章:

javascript - 是否可以将图像文件合并到一个 blob 中

html - 连续 4 张图片,如何在每张图片下居中放置特定文本?

html - 如何在响应式布局中将元素 float 在图像上?

python - 如何从图像中删除文本图章?

python - 如何在不使用 cv2.warpAffine() 的情况下翻译图像? [Python 3 和 OpenCV 4.1]

python - 从白色背景中提取前景图像

iphone - 通过另一个图像 mask 图像

使用 ImportXml 在 Google Sheets 中抓取图像

opencv网络摄像头没有关闭

java - 无法对原始类型 int 调用 getGreen()