去除手写文本中的周围线条和背景图形噪声

2024-05-16 23:08:30 发布

您现在位置:Python中文网/ 问答频道 /正文

在对手写文本执行文本检测和识别之前,我尝试从多个笔记本页面中删除规则和背景笑脸。在

enter image description here

一个earlier thread提供了一些有用的提示,但是我的问题在几个方面有所不同。在

  1. 要保留的文本将写在要删除的背景项上。在
  2. 要删除的项目与文本的颜色不同,这可能是删除它们的关键。在
  3. 要去掉的线条不是很笔直,笑脸就更不笔直了。在

我正在考虑使用OpenCV来完成这项任务,但我愿意使用ImageMagick或命令行GIMP,只要我可以同时处理整个批处理。由于我以前从未使用过这些工具,因此欢迎提供任何建议。非常感谢。在


Tags: 项目文本颜色规则笔记本页面threadopencv
1条回答
网友
1楼 · 发布于 2024-05-16 23:08:30

这里有一个简单的方法,假设文本是蓝色的


我们首先将图像转换为HSV格式,然后创建一个掩码来隔离字符

image = cv2.imread('1.png')
result = image.copy()
image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
lower = np.array([21,0,0])
upper = np.array([179, 255, 209])
mask = cv2.inRange(image, lower, upper)

enter image description here

现在我们执行形态学变换来去除小噪声

^{pr2}$

enter image description here

我们有所需的文本轮廓,这样我们就可以通过用原始图像遮罩来隔离字符

result[close==0] = (255,255,255)

enter image description here

最后,为了准备OCR/Tesseract图像,我们将字符改为黑色

retouch_mask = (result <= [250.,250.,250.]).all(axis=2)
result[retouch_mask] = [0,0,0]

enter image description here

完整代码

import numpy as np
import cv2

image = cv2.imread('1.png')
result = image.copy()
image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
lower = np.array([21,0,0])
upper = np.array([179, 255, 209])
mask = cv2.inRange(image, lower, upper)

kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (2,2))
close = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel, iterations=1)

result[close==0] = (255,255,255)

cv2.imshow('cleaned', result)

retouch_mask = (result <= [250.,250.,250.]).all(axis=2)
result[retouch_mask] = [0,0,0]

cv2.imshow('mask', mask)
cv2.imshow('close', close)
cv2.imshow('result', result)
cv2.waitKey()

相关问题 更多 >