图像阈值处理无法完全消除图像中的点状杂波

时间:2019-01-27 00:33:26

标签: python opencv image-processing ocr image-thresholding

我正在处理某些图像,其中必须进行一些预处理操作以删除所有内容并仅保留文字。
为此,我使用了不同的阈值处理方法(自适应平均阈值,自适应高斯阈值...)。我获得的最佳结果是自适应平均阈值。但是,使用自适应平均阈值不仅消除了不想要的“噪音”,而且还消除了一部分文字!
这是我使用的代码:

src = cv2.imread('input.jpg', cv2.IMREAD_GRAYSCALE)
height, width = src.shape
blockSize = 35
C = 23
amtImage = cv2.adaptiveThreshold(src, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, blockSize, C)
cv2.imwrite('output.jpg', amtImage)

输入图像: 出于保密原因,这些图像是从互联网上拍摄的!

Image 1

Image 2 输出图像:

Image 1

Image 2

我试图通过使用以下代码来消除点缀的噪声:

import cv2
import numpy as np

img = cv2.imread('output.jpg', 0)
_, blackAndWhite = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY_INV)

nlabels, labels, stats, centroids = cv2.connectedComponentsWithStats(blackAndWhite, None, None, None, 8, cv2.CV_32S)
sizes = stats[1:, -1] #get CC_STAT_AREA component
img2 = np.zeros((labels.shape), np.uint8)

for i in range(0, nlabels - 1):
    if sizes[i] >= 10:   #filter small dotted regions
        img2[labels == i + 1] = 255

res = cv2.bitwise_not(img2)
cv2.imwrite('another_output.jpg, res)

这是我所得到的例子:

enter image description here

尽管自适应平均阈值效果不错,但是最终结果仍然不够好,无法进行OCR(使用Tesseract)进行编辑。
任何人都可以提出一些修改或想法,以提高阈值的质量并仅保留最终图像中的文字吗?
抱歉,时间太长了,谢谢!

0 个答案:

没有答案