【发布时间】:2016-01-01 16:50:22
【问题描述】:
我有一张这样的示例图片
我正在寻找一种方法来消除图像中的噪点,以便最终得到一张只有白色背景上的黑色文本的图像,以便我可以将其发送到 tesseract。
我尝试过使用
进行变形kernel = np.ones((4,4),np.uint8)
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
cv2.imshow("opening", opening)
但它似乎不起作用。
我也尝试过寻找轮廓
img = cv2.cvtColor(rotated, cv2.COLOR_BGR2GRAY)
(cnts, _) = cv2.findContours(img, cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
cnts = sorted(cnts, key = cv2.contourArea, reverse = True)[:1]
for c in cnts:
x,y,w,h = cv2.boundingRect(c)
roi=rotated[y:y+h,x:x+w].copy()
cv2.imwrite("roi.png", roi)
使用上面的代码,我得到以下轮廓:
裁剪时会导致此图像:
这仍然不够好。我想要白色背景上的黑色文本,以便我可以将其发送到 tesseract OCR 并获得良好的成功率。
还有什么我可以尝试的吗?
更新
这是另外一张类似的图片。这个比较简单,因为里面有一个平滑的矩形
【问题讨论】:
-
致那些说问题太宽泛的选民。请让我知道如何进一步缩小范围。我不认为这个问题很广泛..
-
你需要做一些自适应阈值,以及打开和关闭操作。 docs.opencv.org/doc/tutorials/imgproc/opening_closing_hats/…您还可以进行自定义腐蚀或膨胀(这基本上是打开和关闭操作所做的)。
-
这是输入图像吗?或者是某种阈值的结果?
-
它总是一些矩形背景吗?
-
@ZdaR 这不是原始图像。这是我在对原始图像进行预处理以提取我认为有文本的部分后得到的图像。我通过使用阈值、变形、houghlinesp、去偏斜和调整大小来做到这一点。
标签: python opencv image-processing computer-vision